Liferay actionUrl中的请求为空

Liferay actionUrl中的请求为空,liferay,liferay-6,Liferay,Liferay 6,我试图在Liferay 6.0.6中读取POST数据,但我总是收到一个空的ActionRequest(在数据不存在的意义上为空): 此时,request.getAttributeNames()、request.getParameterNames()和request.getPortletSession().getAttributeNames()始终为空。我缺少什么?Aw,我可以用 ParamUtil.getString(request, name-of-data) 还缺了一个 @SessionA

我试图在Liferay 6.0.6中读取POST数据,但我总是收到一个空的ActionRequest(在数据不存在的意义上为空):


此时,request.getAttributeNames()、request.getParameterNames()和request.getPortletSession().getAttributeNames()始终为空。我缺少什么?

Aw,我可以用

ParamUtil.getString(request, name-of-data)
还缺了一个

@SessionAttributes({})

在ViewController的开始,尽管我不知道为什么,因为我的工作示例没有使用它们。

Aw,我可以用

ParamUtil.getString(request, name-of-data)
还缺了一个

@SessionAttributes({})
在ViewController的开头,尽管我不知道为什么,因为我的工作示例没有使用它们。

会话属性和命名空间 虽然你对你的问题已经有了部分的答案,但我认为阐述这个答案是有益的

首先,如果您可以发布更多的代码,这将是有益的。具体来说,我对查看您的
liferayportlet.xml
文件和更多的
表单
元素很感兴趣

名称空间 portlet名称空间是与portlet关联的唯一ID。名称空间防止来自同一页面上两个单独portlet的两个同名表单在POST时意外地将数据发送到错误的portlet

在JavaPortlet开发中,所有html表单元素都有一个portlet名称空间。示例JSP页面应如下所示

<!-- This is necessary on all JSP pages -->
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<portlet:defineObjects />

<form id="<portlet:namespace />fm" name="<portlet:namespace />fm" action="${whereever}">
   <input type="text" id="<portlet:namespace />input" name="<portlet:namespace />input" />
   <input type="submit" id="<portlet:namespace />button" name="<portlet:namespace />button">
</form>
到您的
liferayportlet.xml
文件,但它是非常不推荐的

会话属性 您应该小心使用术语“会话属性”。在JSR-168和JSR-286 portlet中,您拥有由应用程序容器(Tomcat等)管理的正常HTTP会话属性

Liferay还有一个portlet会话,它在决策上类似,但用于不同的原因。portlet会话不是由容器管理,而是由Liferay管理。对于加载到页面上的每个portlet,Liferay都有一个单独的portlet会话。在Liferay中,您可以修改
liferayportlet.xml
文件,以更改您的portlet是否具有私有或公共会话(控制它们是否访问门户会话和其他portlet会话)


通常,将请求发布到一个您根本不关心“会话属性”的portlet。将数据发送到后端Portlet类是通过使用命名空间
ActionRequests
完成的。如果在JSP页面中使用上述任一示例,并且通过使用
ParamUtil.getString(actionRequest,“input”)
获得输入框(名为input)的值,则应该没有问题。MVCPortlet或SpringMVCPortlet中的ActionRequests不需要
@SessionAttributes({})
,在这种情况下,会话属性和命名空间 虽然你对你的问题已经有了部分的答案,但我认为阐述这个答案是有益的

首先,如果您可以发布更多的代码,这将是有益的。具体来说,我对查看您的
liferayportlet.xml
文件和更多的
表单
元素很感兴趣

名称空间 portlet名称空间是与portlet关联的唯一ID。名称空间防止来自同一页面上两个单独portlet的两个同名表单在POST时意外地将数据发送到错误的portlet

在JavaPortlet开发中,所有html表单元素都有一个portlet名称空间。示例JSP页面应如下所示

<!-- This is necessary on all JSP pages -->
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<portlet:defineObjects />

<form id="<portlet:namespace />fm" name="<portlet:namespace />fm" action="${whereever}">
   <input type="text" id="<portlet:namespace />input" name="<portlet:namespace />input" />
   <input type="submit" id="<portlet:namespace />button" name="<portlet:namespace />button">
</form>
到您的
liferayportlet.xml
文件,但它是非常不推荐的

会话属性 您应该小心使用术语“会话属性”。在JSR-168和JSR-286 portlet中,您拥有由应用程序容器(Tomcat等)管理的正常HTTP会话属性

Liferay还有一个portlet会话,它在决策上类似,但用于不同的原因。portlet会话不是由容器管理,而是由Liferay管理。对于加载到页面上的每个portlet,Liferay都有一个单独的portlet会话。在Liferay中,您可以修改
liferayportlet.xml
文件,以更改您的portlet是否具有私有或公共会话(控制它们是否访问门户会话和其他portlet会话)


通常,将请求发布到一个您根本不关心“会话属性”的portlet。将数据发送到后端Portlet类是通过使用命名空间
ActionRequests
完成的。如果在JSP页面中使用上述任一示例,并且通过使用
ParamUtil.getString(actionRequest,“input”)
获得输入框(名为input)的值,则应该没有问题。在这种情况下,MVCPortlet或SpringMVCPortlet中的ActionRequests不需要
@SessionAttributes({})

<!-- This is necessary on all JSP pages -->
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<portlet:defineObjects />

<aui:form name="fm" action="${whereever}">
   <input type="text" name="input" />
   <input type="submit" name="button">
</form>
<requires-namespaced-parameters>false</requires-namespaced-parameters>