生成下面的两个文件:
view.jsp:显示欢迎信息,并且提供编辑页面的链接。
edit.jsp:显示有一个文本框的表单,允许欢迎信息可以被修改,并且包括一个回退到view.jsp的超级链接。
MVCPortlet类处理展示我们的JSPs,因此在本DEMO中,我们不需要生成一个单独的JAVA类。
首先我们不希望在同样的页面上出现多个欢迎信息,因此让我们的elearn007greeting 为非实例化。因此只需要编辑liferay-portlet.xml文件即可,如果你的配置文件里有instanceable属性,只需要把其设置为false即可,如果没有,请添加它,例如下面的例子:
<portlet> <portlet-name>my-greeting</portlet-name> <icon>/icon.png</icon> <instanceable>false</instanceable> <header-portlet-css>/css/main.css</header-portlet-css> <footer-portlet-javascript>/js/main.js</footer-portlet-javascript> <css-class-wrapper>my-greeting-portlet</css-class-wrapper> </portlet>
现在我们将生成我们的jsp模板,从编辑view.jsp文件开始,该文件在你的docroot目录下,用下面的内容替换它:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> <%@ page import="javax.portlet.PortletPreferences" %> <portlet:defineObjects /> <% PortletPreferences prefs = renderRequest.getPreferences(); String greeting = (String)prefs.getValue( "greeting", "Hello! Welcome to our portal."); %> <p><%= greeting %></p> <portlet:renderURL var="editGreetingURL"> <portlet:param name="mvcPath" value="/edit.jsp" /> </portlet:renderURL> <p><a href="<%= editGreetingURL %>">Edit greeting</a></p>
edit.jsp
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> <%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %> <%@ page import="javax.portlet.PortletPreferences" %> <portlet:defineObjects /> <% PortletPreferences prefs = renderRequest.getPreferences(); String greeting = renderRequest.getParameter("greeting"); if (greeting != null) { prefs.setValue("greeting", greeting); prefs.store(); %> <p>Greeting saved successfully!</p> <% } %> <% greeting = (String)prefs.getValue( "greeting", "Hello! Welcome to our portal."); %> <portlet:renderURL var="editGreetingURL"> <portlet:param name="mvcPath" value="/edit.jsp" /> </portlet:renderURL> <aui:form action="<%= editGreetingURL %>" method="post"> <aui:input label="greeting" name="greeting" type="text" value="<%= greeting %>" /> <aui:button type="submit" /> </aui:form> <portlet:renderURL var="viewGreetingURL"> <portlet:param name="mvcPath" value="/view.jsp" /> </portlet:renderURL> <p><a href="<%= viewGreetingURL %>">← Back</a></p>
注意,首先在超链接生成部分,使用了<portlet:renderURL>标签,该标签在http://java.sun.com/portlet_2_0标签库中进行了定义。该链接只有一个mvcPath参数,通常被MVCPortlet用来确定调用哪个jsp文件来重绘request 请求。一定注意,要用标签库来生成链接,因为portlet并没有拥有整个WEB页面,相反仅仅是一部分页面。
第二,注意edit.jsp文件的表单有个aui前缀,表示它属于AlloyUI标签库。
该标签库简化了代码量,提高了开发效率,但是你仍然可以使用HTML或是其他标签库这以你自己的选择为优先。
另外的jsp标签库你也会注意到<portlet:defineObjects/>该标签用来在JSP里插入一组隐含的变量,这些变量对开发很重要,包括:renderRequest,portletConfig,portletPreferences,等等,注意JSR-286方案定义了四个生命周期方法:processAction,processEvent,render,和serveResource.
这些变量仅仅可以用在JSP在portlet特定生命周期阶段,下面列表对JSP可用的对象:
l RenderRequest-代表被发送到portlet的请求,该对象仅仅在render请求阶段可用。
l ResourceRequest-代表资源,在JSP处在资源服务阶段可用。
l ActionRequest-代表请求对象,该对象发送到处理一个action的portlet上,该对象在行动处理阶段可用。
l EventRequest-事件请求对象
l ResourceResponse-在资源服务阶段可用,代表资源回应对象,帮助portlet来绘制资源。
l EventResponse
l PortletConfig-代表配置对象
l PortletSession-
l Map<String,Object> portletSessionScope:提供一个映射,类似调用PortletSession.getAttributeMa()
l PortletPreferences-表示portlet的偏好设置
l Map<String,String[]> portletPreferencesValue:提供一个映射,类似PortletPreferences.getMap()的调用,如果没有设置项,该映射则为空。