这篇所说的Struts Portlet是在Ext环境下开发的,使用liferay里面集成的Struts 1.2
本文是基于以前的在Liferay IDE里面创建的ext环境开发。
1、在ext-web目录下面创建如下目录/html/portlet/struts
2、在ext-impl/src下面创建包content,并在这个包下面创建文件Language-ext_zh_CN.properties
3、将tomcat/webapps/root/WEB-INF下面的liferay-display.xml文件copy到ext环境下面的WEB-INF目录下面。
在portlet-ext.xml里面写入如下内容
<portlet> <portlet-name>strutsdemo</portlet-name> <display-name>strutsdemos</display-name> <portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class> <init-param> <name>view-action</name> <value>/strutsportlet/demo</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> </supports> <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle> <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实例属性:Liferay-portlet-ext
在liferay-portlet-ext里面写入,如下内容
<portlet> <portlet-name>strutsdemo</portlet-name> <struts-path>strutsportlet</struts-path> <use-default-template>false</use-default-template> </portlet>
注意:这里的Struts-path是上面配置的value里面的第一个“/”和最后一个“/”之间的内容
portlet-name必须和上面的一样。
在Liferay-display里面将上面的portlet归类显示:
<category name="category.sample"> <portlet id="47" /> <portlet id="48" /> <portlet id="50" /> <portlet id="66" /> <portlet id="strutsdemo"/> </category>
将其放入示例下面,这里的归类,根据自己的需要。
在这个文件Language-ext_zh_CN.properties里面写入我让要让这个portlet显示的名字:
javax.portlet.title.strutsdemo=strutsportlet\u793a\u4f8b
这里的中文要使用native2ascii进行转义。
在struts-config-ext.xml里面写入如下内容:
<action path="/strutsportlet/demo" type="com.liferay.portlet.strutsdemo.StrutsAction"> <forward name="sturts_portlet.view" path="sturts_portlet.view" /> <forward name="sturts_portlet.success" path="sturts_portlet.success" /> <forward name="sturts_portlet.err" path="sturts_portlet.err"/> </action>
这里的path,是前面的portlet-ext.xml里面定义的。其他的和普通Struts一样
在tiles-defs-ext.xml里面写入如下内容:
<definition name="portlet.ext" extends="portlet" /> <definition name="sturts_portlet.view" extends="portlet.ext"> <put name="portlet_content" value="/portlet/struts/view.jsp" /> </definition> <definition name="sturts_portlet.success" extends="portlet.ext"> <put name="portlet_content" value="/portlet/struts/success.jsp" /> </definition> <definition name="sturts_portlet.err" extends="portlet.ext"> <put name="portlet_content" value="/portlet/struts/error.jsp" /> </definition>
这里的portlet.ext继承自portlet,也就是说portlet.ex会使用portlet.jsp作为他的模板。下面的这些同理。
在/html/portlet/struts下面创建init.jsp文件,在里面写入如下内容:
<%@ include file="/html/portlet/init.jsp" %>
这里会报错,不用理会,因为这是通过ext环境开发的,部署后就会找到这个文件的。
创建view.jsp,内容如下:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ include file="/html/portlet/struts/init.jsp" %> This is the <b>LiferayStudy</b> portlet. <portlet:actionURL var="submitUrl"> <portlet:param name="struts_action" value="/strutsportlet/demo" /> </portlet:actionURL> <form action="<%=submitUrl%>" method="post"> 输入你的名字:<input type="text" id="name" name="name"> <input type="submit"" value="提交"> </form>
portlet标签的意思,请参看
package com.liferay.portlet.strutsdemo;
import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletConfig; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.liferay.portal.struts.PortletAction; public class StrutsAction extends PortletAction { public void processAction(ActionMapping mapping, ActionForm form, PortletConfig config, ActionRequest req, ActionResponse res) throws Exception { String name = req.getParameter("name"); if (null == name || "".equals(name)) { setForward(req, "sturts_portlet.err"); } else { setForward(req, "sturts_portlet.success"); } } public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig config, RenderRequest req, RenderResponse res) throws Exception { if (getForward(req) != null && !getForward(req).equals("")) { return mapping.findForward(getForward(req)); } else { return mapping.findForward("sturts_portlet.view"); } } }
成功和错误页面不在写,可以根据自己的需要编写了
打开Ant界面,Eclipse--》show views--》ant 添加build文件,找到Ext工程下面的build.xml文件,点击其中的
Direct-deploy。
完成之后,启动liferay-tomcat
在浏览中输入http://localhost:8080,登录,添加portlet