生成下面的两个文件:

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()的调用,如果没有设置项,该映射则为空。

portlet编写入门相关推荐

  1. Gulp:插件编写入门

    之前挖了个坑,准备写篇gulp插件编写入门的科普文,之后迟迟没有动笔,因为不知道该肿么讲清楚Stream这货,毕竟,gulp插件的实现不像grunt插件的实现那么直观. 好吧,于是决定单刀直入了.文中 ...

  2. Linux kernel: USB driver编写入门(二)

    前面一篇文章Linux kernel: USB driver编写入门(一)介绍了一个最简单的USB驱动的最基本框架,本文将加入probe和disconnect函数,用于响应该设备插入和拔出. 继续在那 ...

  3. c4d脚本python教程_C4D脚本插件编写入门视频教程Intro to Python Scripting | C4DSKY

    C4D脚本插件编写入门视频教程Intro to Python Scripting in Cinema 4d 在这期视频教程中,作者来自Brograph Tuts,讲解了脚本日志和脚本管理器的使用,如何 ...

  4. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】...

    tags: Servlet 什么是Serlvet?# Servlet其实就是一个遵循Servlet开发的java类.Serlvet是由服务器调用的,运行在服务器端. 为什么要用到Serlvet? 我们 ...

  5. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】

    什么是Servlet? Servlet其实就是一个遵循Servlet开发的java类.Servlet是由服务器调用的,运行在服务器端. 为什么要用到Servlet? 我们编写java程序想要在网上实现 ...

  6. python棋类程序_python棋类游戏编写入门

    刚接触棋类游戏程序编写的朋友,往往比较迷惑,不知从何下手. 本文总结了棋类游戏的主程序流程.计算机走子策略.打分方式(以井字棋.黑白棋.五子棋为例),未使用minimax算法,比较简单,适合刚接触的朋 ...

  7. windows下shellcode编写入门

    0x00.介绍 比方说你手头上有一个IE或FlashPlayer现成的漏洞利用代码,但它只能够打开计算器calc.exe.但是这实际上并没有什么卵用,不是吗?你真正想要的是可以执行一些远程命令或实现其 ...

  8. Linux shellcode 编写入门 (转)

    刺猬@http://blog.csdn.net/littlehedgehog 无意当中在安全焦点上面看到的,很入门的一篇文章,不错: 原文地址: http://www.xfocus.net/artic ...

  9. Microsoft Visual C++2010安装教程并编写入门案例

    目录 一.下载安装包 二.安装步骤 (1)下载安装包,解压文件 (2)以管理员身份运行setup.exe安装程序 (3)点击下一步 (4)选择同意协议,然后下一步 (5)选择软件安装目录,然后点击安装 ...

最新文章

  1. Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
  2. 随想:如果手机与手机之间具备了无线电测距测向功能
  3. java 微信高级群发_微信高级群发接口demo
  4. html中视频变圆角,圆形视频和圆角视频的一种实现方式
  5. 神经机器阅读理解最新综述:方法和趋势
  6. ATT开源项目反客为主
  7. python 遍历文件夹写入excel_python:创建文件夹:写入文本1:读取txt:读取Excel文件遍历文件夹:...
  8. php session存到redis,php Session存储到Redis的方法
  9. Java 变量、数据类型
  10. SAAS多租户实现方案_springboot 实现多租户_基于数据库服务器隔离_或共享数据库服务器_但隔离数据库---springcloud工作笔记159
  11. ssm项目之Bookstrap创建页面并分页查询
  12. 数据流分析之WorkList Algorithm
  13. mx250显卡天梯图_mx250显卡天梯图_2020年最新笔记本显卡天梯图,看看你的显卡排在哪!...
  14. android ntp服务器配置
  15. matlab高维矩阵提取其中n维
  16. 为什么新品发布上架之后会没有流量,新品应该怎么发布?
  17. 厦门大学计算机调剂要求,厦门大学考研调剂复试有什么要求
  18. [github] github入手教程
  19. 解决SQLServer复制到Excel中内容换行问题
  20. linux usb drivers开发

热门文章

  1. mysql1440秒未活动_修改phpMyAdmin中的默认1440超时时间
  2. Windows 2003 架设Radius服务器
  3. CSS中详解hight属性
  4. Markdown文档书写规范
  5. 攻防世界welpwn
  6. P2P的Jxta解决方案
  7. 可以录音并将语音转文字助力高效办公的便签APP推荐
  8. idea中热部署插件JRebel的激活和采用依赖的方式进行热部署
  9. C++声明、定义、类的定义、头文件作用、头文件重复引用
  10. 6.0.高等数学3-欧拉方程