Liferay7 BPM门户开发之40: Form表单的Action到Render的数据传递
在Form提交后的变量,很多情况是要展现在jsp页面中,这时Action到Render的变量传递就非常有用。
例如,您在数据库中添加了学生的详细信息。
为了实现这一需求,先创建Form表单(学生的细节,如姓名、出生日期等,通过action url来实现)。
当用户提交表单时,这些数据(学生信息)会在你执行CRUD操作的action方法添加。
添加完成后,需要把一些信息展现到jsp页面。
和v6.2不同的是,action方法里不需要写类似这样的语句:
actionResponse.setRenderParameter("XXX", 变量名);
actionRequest.setAttribute("XXX", 变量名);
举例说明
在Action阶段,我们提交了name变量,然后需要在Render阶段展现在JSP
Java代码
package com.lifiti.portlet; import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.util.ParamUtil; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.ProcessAction;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse; import org.osgi.service.component.annotations.Component; @Component(immediate = true, property = { "com.liferay.portlet.display-category=category.sample",
"com.liferay.portlet.instanceable=true", "javax.portlet.requires-namespaced-parameters=false",
"javax.portlet.display-name=com.lifiti.parts Portlet", "javax.portlet.init-param.template-path=/",
"javax.portlet.init-param.view-template=/view.jsp", "javax.portlet.resource-bundle=content.Language",
"javax.portlet.security-role-ref=power-user,user" }, service = Portlet.class)
public class FirstPortlet extends MVCPortlet {
private static final Log _log = LogFactoryUtil.getLog(FirstPortlet.class.getName()); @Override
public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException {
String peopleName = ParamUtil.get(request, "name", "");
String age = ParamUtil.get(request, "age", "");
_log.info("peopleName by ParamUtil in render ==>" + peopleName);
_log.info("age by ParamUtil in render ==>" + age);
_log.info("age By RenderParameter in render ==>" + request.getAttribute("ageBySetParameter")); request.setAttribute("peopleName", peopleName); super.render(request, response);
} @ProcessAction(name = "send")
public void ReceiveData(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
String name = ParamUtil.getString(actionRequest, "name");
String age = ParamUtil.getString(actionRequest, "age");
String phone = ParamUtil.getString(actionRequest, "phone"); actionRequest.setAttribute("phone", phone);
//actionResponse.setRenderParameter("ageBySetParameter", age);
List<String> list = new ArrayList<String>();
list.add("tom");
list.add("cat");
list.add("ketty");
actionRequest.setAttribute("personList", list); _log.info(" 开始接收数据");
System.out.println("FirstPortlet.java name = " + name);
System.out.println("FirstPortlet.java age = " + age);
System.out.println("FirstPortlet.java phone = " + phone);
}
}
jsp
<%@page import="com.liferay.portal.kernel.portlet.LiferayPortletMode"%>
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@ include file="/init.jsp" %> <p>
<b><liferay-ui:message key="com_lifiti_parts_ComLifitiPartsmvcportlet.caption"/></b>
</p> <c:set var="submit"><liferay-ui:message key="com_lifiti_parts_ComLifitiPartsmvcportlet.submit"/></c:set> <c:if test="${not empty phone }">
Phone: ${phone} added successfully.
</c:if> <c:if test="${not empty peopleName }">
PeopleName: ${peopleName} added successfully.
</c:if>
<c:forEach var="x" items="${personList}">
<br> ${x}<br>
</c:forEach>
<portlet:actionURL var="sendURL" name="send">
</portlet:actionURL> <form action="${sendURL}" method="post" name="fm">
<aui:input name="name" label="Name" id="name"/>
<aui:input name="age" label="Age" id="age"/>
<input type="text" name="<portlet:namespace/>phone" />
<input type="submit" value="${submit}"></input>
</form>
log:
FirstPortlet.java name = 王昕
FirstPortlet.java age = 1
FirstPortlet.java phone = 123
16:16:59,946 INFO [http-nio-8080-exec-7][FirstPortlet:32] peopleName by ParamUtil in render ==>王昕
16:16:59,947 INFO [http-nio-8080-exec-7][FirstPortlet:33] age by ParamUtil in render ==>1
16:16:59,947 INFO [http-nio-8080-exec-7][FirstPortlet:34] age By RenderParameter in render ==>null
v7.0中这种语句可以不用写:
actionRequest.setAttribute("phone", phone);
actionResponse.setRenderParameter("ageBySetParameter", age);
实际上,只需要2句就能完成数值传递:
String peopleName = ParamUtil.get(request, "name", "");
request.setAttribute("peopleName", peopleName);
直接使用ParamUtil很方便
Liferay7 BPM门户开发之40: Form表单的Action到Render的数据传递的更多相关文章
- Liferay7 BPM门户开发之39: Form表单提交的ProcessAction处理
在v6.2开始后,需要设置<requires-namespaced-parameters>false</requires-namespaced-parameters> 来避免 ...
- Liferay7 BPM门户开发之9: 流程表单数据动态映射体系
设计目的: 每个流程表单涉及不同的表单变量.比如请假流程有3个任务节点,分别是 Task1:开始流程,填写请假人.请假原因.请假开始时间.请假结束时间: Task2:上级审批,填写是否同意,审批意见: ...
- Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)
开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...
- Liferay7 BPM门户开发之17: Portlet 生命周期
Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...
- Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发
hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...
- Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)
注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,“启动者变量”名统一设置为initUserId 启动时要做的: ident ...
- Liferay7 BPM门户开发之2: BPMN 2.0 规范入门 (Activiti BPMN extensions)
Liferay最大的问题是BPM弱,如果做企业开发,BPM必不可少,所以直入主题,做个BPMN2入门. 本文参考地址:http://activiti.org/userguide/index.html# ...
- Liferay7 BPM门户开发之23: 了解内置工作流(Kaleo Workflow)
Liferay内置的工作流是企业版的功能,虽然简单粗糙,但依然不支持社区版.既然要用更强大的Activiti来替代它,那就非常有必要学习一下内置工作流的一些思想,以便借鉴. 它的特点: 实体的工作流操 ...
- Liferay7 BPM门户开发之15: Liferay开发体系简介
Liferay SDK 开发体系 主要分6种: Portlet Hook Theme Layout Templates Web Modules Ext Portlet :类似于servlet的web组 ...
随机推荐
- Head First 设计模式读书笔记
在网上学习了一段时间设计模式,总感觉不系统,很容易忘,最近买书,学习了<Head First设计模式>,受益匪浅,特做此记录,以便激励自己不断的向后学习. 原书JAVA版本,本次学习记录及 ...
- Spring 学习笔记 2. 尚硅谷_佟刚_Spring_IOC&DI概述
1,远古时代 这里讲述的IOC的演变历史,举一个例子,假如需要生成HTML和PDF格式的报表,以前的开发方式就是有个报表服务类需要使用报表生成器 它需要和其他三个都关联,它既需要知道接口类型,也需要知 ...
- backbone框架思路
Backbone是MVC框架.如何使用这个框架来简化前端过程呢?作为一个初学者,虽然网上有它的官方文档,但是都是讲的一些方法,思路分析的却对初学者来说,看得晕乎乎的.现在就把自己对这个框架的理解记录在 ...
- Word 2007 文档结构图混乱
Word 2007在编写大型文档时经常出现文档结构图混乱的情况,经过多番检索试验,得出结论: 绝对有效的临时性解决方案:在打开word的时候左下角会有提示word自动更新文档样式,按esc键取消,然后 ...
- LINUX 虚拟机克隆与网络配置
虚拟机克隆后,启动之后发现网卡没有启动.发现提示错误信息“Device eth0 does not seem to be present, delaying initialization.” 解决方法 ...
- 黑马程序员-autorelease pool
Autorelease:可以延迟给对象发送release消息.发送一个autorelease消息给对象,证明该对象在一定时间内有效,一定时间后会对该对象进行释放,进行一次release. 一个auto ...
- angular+requirejs前端整合
requirejs或者seajs我相信在前端的开发工作中经常使用到,而angular,这个强大的web前端框架很多公司也在引入.本文主要记录自己在工作学习中如何对angular跟requirejs进行 ...
- [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- SQLite无法使用drop column删除表字段解决办法
由于项目需求变更,我需要在sqlite数据库的表中删除一个字段,通用的sql操作语句如下: alter table record drop column name; 结果数据库提示如下错误: 搜索得知 ...
- MySQL 升级详细步骤 (包括 Percona)
MySQL 升级步骤 MySQL 5.1.72 升级到 MySQL 5.5.36 鉴于我在升级的时候遇到的麻烦问题,我觉得有必要把一些细节说清楚,免得引起误解了.感觉官方文档上的升级步骤写的比较简单, ...