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。到此完成任务。
画面如下: