【liferay】3、liferay 添加spring支持

1、添加对应的spring的jar

地址:https://spring.io/projects

 

 

 

选中springframework

 

 

 

进入git源码的地方,看简介

 

 

 我们需要编译好的jar

 

 

 

 

 

 当然也可以自己编译,不过我没干过

 

接下来就很麻烦了,就是要找到spring的目录

 

 

一直往下翻,翻到org目录

 

 

 

 

 

 

 

 

 

 

 选中对应的文件,右键下载

 

2、吧lib添加到对应的liferay插件目录中

 

 

 

 3、配置spring进入项目

 

 

 修改portlet.xml配置文件

参考spring给的范例:

 

    <!-- spring portlet start -->
	
    <portlet>
        <portlet-name>springmvc-sample</portlet-name>
        <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
        <supports>
            <mime-type>text/html</mime-type>
            <portlet-mode>view</portlet-mode>
        </supports>
        <portlet-info>
            <title>Sample Portlet</title>
        </portlet-info>
    </portlet>
	
    <!-- srping portlet end -->                    

  

 

 

 

 根据spring官方文档,展示的portlet配置方式

 

spring配置会对对应的web-inf目录下的文件名为:[portlet-name]-portlet.xml进行解析

 

 

 

 注意在这个配置文件中配置的对象会覆盖webapplicationContext中的对象

 

创建这个文件

 

 

 

 springmvc-sample-portlet.xml

 初始化spring配置文件,后面关于spring的配置就可以放在这里

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

    
    
        
        
</beans>

 

接下来我们创建一个spring的controller

 

 

 SampleController.java

 

package com.xiaof.springportlet.controller;

import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.mvc.AbstractController;

/**
 * 测试spring-portlet功能
 * @author xiaof
 *
 * 所有spring portlet的控制器都继承于AbstractController
 */
public class SampleController extends AbstractController {


    public ModelAndView handleRenderRequestInternal(RenderRequest request,
            RenderResponse response) throws Exception {
        
        ModelAndView mav = new ModelAndView("foo");
        mav.addObject("message", "hello world spring portlet!");
        
        return mav;
    }
}

 

我们把这个bean配置进去,在配置之前我们了解一下spring配置的controller可以修改portlet的那些属性

 

 这点我们写在配置文件中

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

    
    <bean id="sampleController" class="com.xiaof.springportlet.controller.SampleController">
        <!-- 
            这里可以配置的属性有4个,原谅我的英语不好,基本都是百度翻译,
            requireSession: 标识这个控制器是否需要一个session来工作,这个功能适用所有controller,
                当前controller使用的不是当前控制器的session的时候,抛出SessionRequiredException
            synchronizeSession(synchronizeOnSession 4.3版本):如果需要controller在用户回话上保持同步指定这个,如果指定此变量扩展控制器覆盖handlerenderrequestinternal(..)
                和handleactionrequestinternal(..)方法,并将同步用户的会话。
                注意实际应该是:synchronizeOnSession而不是synchronizeSession
            renderWhenMinimized:如果您希望控制器在portlet处于最小化状态时实际呈现视图,请将其设置为true。默认情况下,
                此设置为false,portlet,在最小化状态,不显示任何内容。
            cacheSeconds:当您想要控制器重写portlet定义的默认缓存过期时,在这里指定一个正整数。
                默认情况下,它被设置为- 1,不会改变默认缓存。将其设置为0将确保结果永远不会缓存。
            
            最后除了最后一个参数是给整数,其余参数都是Boolean类型
         -->
        <property name="cacheSeconds" value="120" />
    </bean>
        
        
</beans>

 

结果发现liferay会吧“-“屏蔽掉,所以配置文件名字改为  springmvcsample-portlet.xml

 

 

 

 修改配置文件,显示页面

 

 修改展示名称

 

 

 

 为了方便访问对应的jsp页面,我们在spring配置文件中设置对应的前缀和后缀

 

 

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

    
    <bean id="sampleController" class="com.xiaof.springportlet.controller.SampleController">
        <!-- 
            这里可以配置的属性有4个,原谅我的英语不好,基本都是百度翻译,
            requireSession: 标识这个控制器是否需要一个session来工作,这个功能适用所有controller,
                当前controller使用的不是当前控制器的session的时候,抛出SessionRequiredException
            synchronizeSession(synchronizeOnSession 4.3版本):如果需要controller在用户回话上保持同步指定这个,如果指定此变量扩展控制器覆盖handlerenderrequestinternal(..)
                和handleactionrequestinternal(..)方法,并将同步用户的会话。
                注意实际应该是:synchronizeOnSession而不是synchronizeSession
            renderWhenMinimized:如果您希望控制器在portlet处于最小化状态时实际呈现视图,请将其设置为true。默认情况下,
                此设置为false,portlet,在最小化状态,不显示任何内容。
            cacheSeconds:当您想要控制器重写portlet定义的默认缓存过期时,在这里指定一个正整数。
                默认情况下,它被设置为- 1,不会改变默认缓存。将其设置为0将确保结果永远不会缓存。
            
            最后除了最后一个参数是给整数,其余参数都是Boolean类型
         -->
        <property name="cacheSeconds" value="120" />
    </bean>
    
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
        
</beans>

 

 

 

 在前天页面展示出来

 

 

 controller代码

package com.xiaof.springportlet.controller;

import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import org.springframework.web.portlet.mvc.AbstractController;

/**
 * 测试spring-portlet功能
 * @author xiaof
 *
 * 所有spring portlet的控制器都继承于AbstractController
 * 这里requestmapping模式必须为view模式,对应portlet中的portlet-mode
 */
@RequestMapping("view")
public class SampleController extends AbstractController {

    /**
     * 注意这里使用的是@RenderMapping,可以不用
     * 因为这里是handleRenderRequestInternal方法,默认会被执行
     */
//    @RenderMapping
    public ModelAndView handleRenderRequestInternal(RenderRequest request,
            RenderResponse response) throws Exception {
        
        System.out.println("test spring portlet!!!");
        ModelAndView mav = new ModelAndView("springmvc-sample/view");
        mav.addObject("message", "</br>hello world spring portlet!");
        
        return mav;
    }
}

 

 

 

控制台输出:

 

 

 

 页面:

 

 

 view.jsp源码

<%@ page contentType="text/html; charset=utf-8" language="java"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>

<meta http-equiv="expires" content="0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">

<portlet:defineObjects />


这个spring portlet 的message为
${message }

 

posted on 2018-01-04 22:55 cutter_point 阅读() 评论() 编辑 收藏

版权声明:本文为cutter-point原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cutter-point/p/8179699.html