• 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很方便

  • 相关阅读:
    Meten Special Activities II
    Meten Special Activities II
    Meten Special Activities II
    Meten Special Activities II
    Meten Special Activities
    Meten Special Activities
    Meten Special Activities
    Meten Special Activities
    Meten Special Activities
    冒泡排序和选择排序
  • 原文地址:https://www.cnblogs.com/starcrm/p/6108007.html
Copyright © 2020-2023  润新知