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 }