Liferay 6.1开发学习(十七):基于注解的SpringMVC portlet开发
SpringMVC使用起来是简单易懂,方便快捷。springmvc 在很早之前就开始提供对于JSR168的支持,同样的liferay的这个portal是实现了JSR 168和JSR268规范的,理论只要是提供对JSR 168或JSR268规范支持的MVC框架都可以用来开发Liferay portlet,像Struts1/struts2/SpringMVC等。
对于SpringMVC在portlet中的使用,在Spring的官方文档中已经有说了详细的说明(在spring-framework-reference中的19章。),这里参考官方文档进行配置。
环境准备
Liferay版本:6.1.1 CE版本
Spring版本:3.2.0 GA
Liferay IDE: 1.6.1
开发步骤
一、导入SpringMVC portlet所需要的jar包。
- spring-beans-3.2.0.RELEASE.jar
- spring-context-3.2.0.RELEASE.jar
- spring-core-3.2.0.RELEASE.jar
- spring-expression-3.2.0.RELEASE.jar
- spring-web-3.2.0.RELEASE.jar
- spring-webmvc-3.2.0.RELEASE.jar
- spring-webmvc-portlet-3.2.0.RELEASE.jar
二、新建一个Portlet插件开发的工程,可以使用Liferay IDE中的portlet创建向导建立一个普通的插件工程。
三、修改web.xml,在里面添加如下内容:
- <servlet>
- <servlet-name>ViewRendererServlet</servlet-name>
- <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>ViewRendererServlet</servlet-name>
- <url-pattern>/WEB-INF/servlet/view</url-pattern>
- </servlet-mapping>
四、portlet.xml中的内容修改,portlet.xml中的主要内容如下,主要为portlet-class的内容,要使用spring的dispatcherPortlet,下面的init-param为非必须的,他配置的内容为当前portlet所对应的mvc配置信息的xml地址,如果不配置,则自动的在web-inf目录下面寻找名称和当前portlet-name一样的xml文件。
- <portlet-name>SpringMVC</portlet-name>
- <display-name>SpringMVC</display-name>
- <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
- <init-param>
- <name>contextConfigLocation</name>
- <value>/WEB-INF/SpringMVC-portlet.xml</value>
- </init-param>
- <expiration-cache>0</expiration-cache>
- <supports>
- <mime-type>text/html</mime-type>
- <portlet-mode>view</portlet-mode>
- </supports>
五、springmvc的配置XML信息如下:SpringMVC-portlet.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.2.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
- <context:component-scan base-package="com.huqiwen.portlet" />
- <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>
可以看到这里和普通的SpringMVC的配置没有什么区别。
六、编写SpringMVC的controller类,如下:
- @Controller
- @RequestMapping(value = "VIEW")
- public class SpringPortlet {
- @RenderMapping
- public String view(Model model){
- model.addAttribute("username", "huqiwen");
- return "view";
- }
- @RenderMapping(params = "action=edit")
- public String edit(Model model){
- model.addAttribute("edit", "action=edit");
- return "edit";
- }
- }
说明:
@RequestMapping中的VIEW,代表当前的是portlet的VIEW模式,如果是EDIT模式,则将这里的VIEW换成edit即可。
@RenderMapping 默认对应的是portlet进入的时候执行的方法。
@RenderMapping(params = "action=edit") 这个请求的是对应于用户在页面中的请求,如JSP中有如下的portlet请求,则会进入到这个方法里面,这里param name可以自定义,不一定叫action,可以叫cmd,op等均可
- <portlet:renderURL var="edit">
- <portlet:param name="action" value="edit"/>
- </portlet:renderURL>
一个简单的SpringMVC portlt示例下载:点击我
牛逼了,学习了。
感谢冷月无私的奉献。。。 😳 😳 😳
web.xml文件中的org.springframework.web.servlet.ViewRendererServlet的作用是?
它对应的url-pattern是怎么得出来的? 😯
这个还没有仔细研究,这个是Spring的官方参考手册上给出来的,在Spring的官方文档中已经有说了详细的说明(在spring-framework-reference中的19章)有Spring的portlet的介绍
有没有试过加入spring,然后在controller里注入spring中的bean?对spring不是特别了解,能不能做个demo?
大神就是大神,膜拜啊!
我还想请问一下,在使用SpringMVC从view页面向edit页面跳转时,我想同时传递一个参数,在controller类中进行获取,并进行相应的查询,应该怎么办呢?
麻烦冷月了!
将参数拼在URL里面就可以了
为什么这样<a href="?name=123″>页面转发测试不能传递参数,并且也不能跳转页面。
楼主啊: /WEB-INF/servlet/view 为什么web.xml文件中要配成这样?
楼主,我在同一个页面中添加两个portlet,但是会出现内容重复的情况
@RequestMapping(value = “VIEW”) ,由URL映射变成VIEW模式映射,每一个portlet都对应一个配置文件,每一个配置文件单独扫描一个包,那么一个项目做完还不得几十上百个配置文件。这时spring相关的扫描匹配controller该如何做?