一.Liferay开发:
有2种方法,一种为自动生成框架结构,以及一些配置文件,还有一种方法是手动添加这些文件。前者速度比较快,但是不够灵活,无用的代码比较多,在手动写过配置文件后就不能够再用自动生成的方法来开发了,这样会使得配置文件被改动,而出现许多错误异常。后者虽然速度比较慢,但是对于熟练的开发者来说这种比较方便,灵活。
例一
仿照ext中原来的例子reports。
1. 在ext-impl/src下新建package,命名为com.ext.portlet.hello,新建package,命名为com.ext.portlet.hello.action。在com.ext.portlet.hello中新建类HelloPortlet,在com.ext.portlet.hello.action中新建类HelloAction。在HelloPortlet中加入以下代码package com.ext.portlet.hello;
import java.io.IOException;
import javax.portlet.PortletException;
import javax.portlet.PortletPreferences;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.liferay.portlet.StrutsPortlet;
public class HelloPortlet extends StrutsPortlet {
public void doView(RenderRequest req, RenderResponse res)
throws IOException,PortletException {
PortletPreferences prefs = req.getPreferences();
System.out.println(prefs.getValue("test", ""));
super.doView(req, res);
}
}
在HelloAction中加入以下代码
package com.ext.portlet.hello.action;
import com.liferay.portal.struts.PortletAction;
import com.liferay.portal.kernel.util.Constants;
import java.util.ArrayList;
import java.util.List;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.WindowState;
import javax.servlet.jsp.PageContext;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class HelloAction extends PortletAction {
public ActionForward render(ActionMapping mapping, ActionForm form,
PortletConfig config, RenderRequest req, RenderResponse res)
throws Exception {
if (req.getWindowState().equals(WindowState.NORMAL)) {
return mapping.findForward("portlet.ext.hello.view");
} else {
List reports = new ArrayList();
reports.add("One");
reports.add("Two");
reports.add("Three");
req.setAttribute("reports", reports);
return mapping.findForward("portlet.ext.hello.view_reports");
}
}
}
2. 在ext-web/docroot/html/portlet/ext文件夹下新建文件夹hello,在其中加入JSP文件,init.jsp,view.jsp,view_reports.jsp。
在init.jsp中加入以下代码:
<%@ include file="/html/common/init.jsp" %>
<portlet:defineObjects />
<%
PortletPreferences prefs = renderRequest.getPreferences();
%>
在view.jsp中加入以下代码:
<%@ include file="/html/portlet/ext/hello/init.jsp" %>
<a href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />">Test <%= prefs.getValue("test", "") %></a>
在view_reports.jsp中加入以下代码:
<%@ include file="/html/portlet/ext/hello/init.jsp" %>
<%
List reports = (List)request.getAttribute("reports");
%>
<%
for (int i = 0; i < reports.size(); i++) {
String reportName = (String)reports.get(i);
%>
<%= reportName %><br>
<%
}
%>
3. 然后在ext-web/docroot/WEB-INF中添加配置:
配置文件为5个,分别为:liferay-display.xml liferay-portlet-ext.xml portlet-ext.xml struts-config.xml(struts-config-ext.xml) tiles-defs.xml(tiles-defs-ext.xml)
分别修改:
在liferay-display.xml中加入<portlet id=”hello” />
在liferay-portlet-ext.xml中加入
<portlet>
<portlet-name>hello</portlet-name>
<struts-path>ext/hello</struts-path>
<use-default-template>false</use-default-template>
</portlet>
在liferay-portlet-ext.xml中加入
<portlet>
<portlet-name>hello</portlet-name>
<display-name>hello</display-name>
<portlet-class>com.ext.portlet.hello.HelloPortlet</portlet-class>
<init-param>
<name>view-action</name>
<value>/ext/hello/view_reports</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
<portlet-preferences>
<preference>
<name>test</name>
<value>123456</value>
</preference>
</portlet-preferences>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
在struts-config.xml(struts-config-ext.xml)中加入
<action path="/ext/hello/view_reports" type="com.ext.portlet.hello.action.HelloAction">
<forward name="portlet.ext.hello.view" path="portlet.ext.hello.view" />
<forward name="portlet.ext.hello.view_reports" path="portlet.ext.hello.view_reports" />
</action>
在tiles-defs.xml(tiles-defs-ext.xml)中加入
<definition name="portlet.ext.hello.view" extends="portlet">
<put name="portlet_content" value="/portlet/ext/hello/view.jsp" />
</definition>
<definition name="portlet.ext.hello.view_reports" extends="portlet">
<put name="portlet_content" value="/portlet/ext/hello/view_reports.jsp" />
</definition>
4. 修改portlet的名字,在ext-impl/content下的Language-ext.properties可以修改portlet的标题名字。