[Liferay]使用Spring MVC开发Portlet应用

开发环境
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 框架处理此异常
  


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值