Liferay7 BPM门户开发之39: Form表单提交的ProcessAction处理

在v6.2开始后,需要设置<requires-namespaced-parameters>false</requires-namespaced-parameters>  来避免在jsp中写<portlet:namespace/>的input前缀

在v7.0发现,注解方式是不灵的!

即  "javax.portlet.requires-namespaced-parameters=false", 无效果, 真是汗...

但我们是有办法在7.0中解决的,直接上代码

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>


<liferay-portlet:renderURL var="openPortletURL" copyCurrentRenderParameters="true" portletMode="<%=LiferayPortletMode.VIEW.toString() %>" 
  windowState="<%=LiferayWindowState.NORMAL.toString()%>">
  <liferay-portlet:param name="param" value="参数的值"/>
</liferay-portlet:renderURL>
<c:set var="submit"><liferay-ui:message key="com_lifiti_parts_ComLifitiPartsmvcportlet.submit"/></c:set>
<a href="${openPortletURL}">Render Url created</a>

<portlet:actionURL var="sendURL" name="send">  
</portlet:actionURL>  
  
<form action="${sendURL}" method="post" name="fm">  
    <aui:input name="name" label="Name" id="name"/> 
    <input type="text" id="age" name="age" />  
    <input type="text" name="<portlet:namespace/>phone" />  
     <input type="submit" value="${submit}"></input>  
</form>  

 

portlet 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 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 {
   _log.info(" This is render method of RenderURLByLiferayTagPortlet");
  
    String data = request.getParameter("param");
    String data1= ParamUtil.getString(request, "param","");
    System.out.println("parameter with request.getParameter is =>"+data);
    System.out.println("parameter with ParamUtil.getString is =>"+data1);
    
   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"); 
          _log.info(" 开始接收数据");
          System.out.println("FirstPortlet.java  name = " + name);  
          System.out.println("FirstPortlet.java  age = " + age);  
          System.out.println("FirstPortlet.java  phone = " + phone);  
      }  
}

 

界面:

运行的结果:

name = 王昕

age =

phone = 123

 

我们发现age是空的,看来说明如果用input元素,那还得写<portlet:namespace/> ,要么就用AUI,应该问题会比较少

 

posted @ 2016-11-27 20:17  昕友软件开发  阅读(987)  评论(0编辑  收藏  举报
欢迎访问我的开源项目:xyIM企业即时通讯