Liferay:Struts2.X Portlet的实现

来源:互联网 发布:薛之谦淘宝下线 编辑:程序博客网 时间:2024/05/02 04:27

Liferay的系统中提供了Struts1.X的StrutsPortlet这个类。但在单独的Portlet中使用不了。

如果我们想在自己的Portlet使用Struts2.X的框架,该怎么办呢?根据网上的资料做如下步骤。

1. 新建一个Portlet。比如命名为StructsTest-portlet。

2. /StructsTest-portlet/docroot/WEB-INF/lib文件夹下面加入必要的JAR文件。

   ・ commons-logging-1.1.1.jar

 ・dwr-1.1.1.jar

 ・freemarker-2.3.16.jar

 ・ognl-3.0.1.jar

 ・struts2-core-2.2.3.jar

 ・struts2-portlet-plugin-2.2.3.jar

 ・xwork-core-2.2.3.jar


3. /StructsTest-portlet/docroot/WEB-INF/liferay-plugin-package.properties中加入必要的包信息。

  portal.dependency.jars=\
    commons-logging.jar,\
    freemarker.jar,\
    commons-beanutils.jar,\
    commons-collections.jar,\
    commons-digester.jar,\
    commons-fileupload.jar,\
    commons-io.jar,\
    commons-lang.jar,\
    commons-validator.jar,\
    oro.jar,\
    javassist.jar,\
    struts.jar,\
    portals-bridges.jar


4. 创建一个Struts2Action类。

package com.han.portal.portlet.struts;

import org.apache.struts2.dispatcher.DefaultActionSupport;

import com.opensymphony.xwork2.ActionSupport;

public class Struts2Action extends DefaultActionSupport {
    String name = null;

    @Override
    public String execute() throws Exception {
        //Enter business logic here    
        return ActionSupport.SUCCESS;          
    }
                  
    public void validate() {
      if ((name==null) || (name.length() == 0))
        addFieldError("name", "Name is required!");
      }
        
    public void setName(String name){            
      this.name = name;
    }

    public String getName(){            
      return name;
    }
}


5. /StructsTest-portlet/docroot/WEB-INF/src下面追加Struts的配置文件struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="view" extends="struts-portlet-default" namespace="/view">
                
        <action name="index" class="com.han.portal.portlet.struts.Struts2Action" method="input">
            <result name="input">/index.jsp</result>            
        </action>        
        
        <action name="helloForm" class="com.han.portal.portlet.struts.Struts2Action">
            <result name="input">/index.jsp</result>
            <result name="success">/result.jsp</result>
        </action>       
    </package>
</struts>


6. 修改/StructsTest-portlet/docroot/WEB-INF/portlet.xml

      <!--<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
        <init-param>
            <name>view-jsp</name>
            <value>/view.jsp</value>
        </init-param>

        -->

       <portlet-class>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</portlet-class>
        <init-param>
            <name>viewNamespace</name>
            <value>/view</value>
        </init-param>

           <!-- The default action to invoke in view mode. -->
           <init-param>
              <name>defaultViewAction</name>
              <value>index</value>
           </init-param>



7. /StructsTest-portlet/docroot/下面追加JSP文件。

7-1. index.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>

<h2>Hello <a href="http://struts.apache.org/2.2.3/" target="_blank"><img src="/StructsTest-portlet/images/struts2.png"/></a></h2>

<div style="color:red; width: 50%" align="left;">          
  <s:fielderror/>       
</div>
<s:form action="helloForm" method="POST" theme="simple">
    Enter Your Name:<s:textfield name="name" value="%{name}" required="true"/>
    <s:submit/>
</s:form>


7-2. result.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<h2>Goodbye <s:property value="name"/>!!!</h2>
<hr/>
<h3>from</h3> <img src="/StructsTest-portlet/images/struts2.png"/>
<hr/>
<p>
<a href="<s:url action="index"/>">Back to front page</a>
</p>


8. 执行/StructsTest-portlet/build.xml的deploy任务,发布该Portlet。


9. 画面上追加该Portlet。到此完成任务。

画面如下: