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

  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/starcrm/p/6108007.html
Copyright © 2011-2022 走看看