开发环境
IDE : Liferay Developer Studio Version: 1.6.1.v201212111822
Liferay : liferay-portal-6.0-ee-sp1
server : tomcat-6.0.29
plugin sdk : liferay-plugins-sdk-6.0-ee-sp1 (portlet开发sdk并不是必须的)
Spring : 2.5
这个例子是使用spring mvc开发portlet简单示例, 只贴出部分代码, 完整代码在附件。
需要将以下jar包添加到 WEB-INF/lib中
spring-context.jar
spring-web.jar
spring-webmvc-portlet.jar
spring-webmvc.jar
spring.jar
需要在liferay-plugin-package.properties 添加
portal-dependency-jars= \
jstl-api.jar,\
jstl-impl.jar
portal-dependency-tlds= \
c.tld
1. 建一个空的Liferay Project, Project name 为 springmvc-sample-portlet
2. 打开web.xml, 修改至如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>springmvc-sample-portlet</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context/application-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>ViewRendererServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ViewRendererServlet</servlet-name>
<url-pattern>/WEB-INF/servlet/view</url-pattern>
</servlet-mapping>
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/portlet_2_0</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
3. 编辑portlet.xml
<?xml version="1.0"?>
<portlet-app
version="2.0"
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
>
<portlet>
<portlet-name>1</portlet-name>
<display-name>SpringMVC Sample Portlet</display-name>
<portlet-class>
org.springframework.web.portlet.DispatcherPortlet
</portlet-class>
<init-param>
<name>contextConfigLocation</name>
<value>/WEB-INF/context/springmvc-sample-portlet.xml</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>
<resource-bundle>content/Language</resource-bundle>
<portlet-info>
<title>SpringMVC Sample Portlet</title>
<short-title>SpringMVC SamplePortlet</short-title>
<keywords></keywords>
</portlet-info>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>
可以看出来并不需要自己创建一个<portlet-class>, 而是使用DispatcherPortlet, 就比如我们在一般portlet时使用的MVCPortlet
< portlet-class>com.liferay.util.bridges.mvc.MVCPortlet </portlet-class>
4. 创建java bean, com.liferay.sample.springmvcsample.model.Address.java , 其中只有几个属性跟setter getter
5. 创建com.liferay.sample.springmvcsample.controller.
HelpController
6. 创建jsp页面
7. 创建spring 配置文件
在 WEB-INF/context文件夹创建application-context.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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" >
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="cache" value="true" />
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/html/springmvc_sample_portlet/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="defaultExceptionHandler" class="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver">
<property name="order" value="10" />
<property name="defaultErrorView" value="error" />
<property name="exceptionMappings" >
<props>
<prop key="javax.portlet.UnavailableException">unavailable</prop>
<prop key="java.lang.Exception" >error</prop>
</props>
</property>
</bean>
</beans>
在 WEB-INF/context文件夹创建springmvc-sample-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" >
<bean id="portletModeHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">
<property name="portletModeMap" >
<map>
<entry key="view" value-ref="viewController" />
<!--
<entry key="edit" value-ref="editController" />
-->
<entry key="help" value-ref="helpController" />
</map>
</property>
</bean>
<bean id="viewController" class="org.springframework.web.portlet.mvc.SimpleFormController">
<property name="commandClass" value="com.liferay.sample.springmvcsample.model.AddressBook" />
<property name="commandName" value="addressBook" />
<property name="formView" value="addressInput" />
<property name="successView" value="result" />
</bean>
<!--
<bean id="editController" class="com.liferay.sample.springmvcsample.controller.EditController">
<property name="viewName" value="edit" />
</bean>
-->
<bean id="helpController" class="com.liferay.sample.springmvcsample.controller.HelpController">
<property name="viewName" value="help" />
</bean>
</beans>
8. 对于view, edit, help三种模式对应三种不同的处理方式
view mode 是由
SimpleFormController 处理
help mode 是由我们自己创建的
HelpController处理
edit mode 刚开始也是有我们自己创建的
EditController处理, 但是为了看出区别, 在这里注释掉, 这样就能在点击edit mode的时候抛出异常, 并由Spring 框架处理此异常