zoukankan      html  css  js  c++  java
  • 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很方便

  • 相关阅读:
    彩色文件夹、彩色文件、图标标记(MultiColorWin)快速操作
    git 国内源
    Mysql 日期格式化 复杂日期区间查询
    项目版本管理Git使用详细教程
    SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑
    SpringBoot Spring Security 核心组件 认证流程 用户权限信息获取详细讲解
    SpringBoot包扫描之多模块多包名扫描和同类名扫描冲突解决
    初阶绘图
    变量与档案存取
    结构化程式和自定义函数
  • 原文地址:https://www.cnblogs.com/starcrm/p/6108007.html
Copyright © 2011-2022 走看看