在使用Liferay 6.2以上版本的时候,可能会碰到一个情况就是,在后端取不到前面的Form表单的值。
比如现在有一个Form表单:
<input type="text" name="userName">
我们在后端使用如下代码进行取值的时候取不到:
String userName = request.getParameter("userName")
或者:
String userName = ParamUtil.getString(request, "userName");
我们会发现这两种方式取到的值都是空的,而同样的代码在6.2之前的版本里面是没有问题,原因是从Liferay 6.2开始,默认情况下Liferay要求必须添加Namespace才行,解决方法有两个:
1、设置namespace为非必须。
2、为我们的表单添加上namespace。
设置Namespace为非必须
打开Portlet插件工程中的liferay-portlet.xml,在相应的Portlet里面添加如下代码:
<requires-namespaced-parameters>false</requires-namespaced-parameters>
位置示例如下,一般入在icon和header-portlet-css的中间。
添加完成后,重新部署即可取到值。
为表单添加上namespace
将页面上的代码改为如下:
<input type="text" name="<portlet:namespace/>userName">
改成如上的代码,也就是为此字段添加了namespace,后端即可以取到值。
注意:这里只是form表单里面的值有变化,后端的代码不用修改。
使用AUI标签
如果即不想改liferay-portlet.xml,也不想自己添加namespace,则可以使用AUI的form标签。
<aui:input label="User Name" name="userName">
使用AUI标签的时候,他其实是会自动的添加上namespace,本质上和上面手动的添加namespace是一样的。
===============================================================
<!-- 跨WAR包使用Portlet -->
<private-session-attributes>false</private-session-attributes>
例如:
<portlet>
<portlet-name>portlet-a</portlet-name>
<icon>/icon.png</icon>
<!-- 跨WAR包使用Portlet -->
<private-session-attributes>false</private-session-attributes>
<!-- 设置namespace为非必须,或者在表单上添加 -->
<requires-namespaced-parameters>false</requires-namespaced-parameters>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>
/js/main.js
</footer-portlet-javascript>
<css-class-wrapper>portlet-a-portlet</css-class-wrapper>
</portlet>
注意:在liferay-portlet.xml中添加配置标签(例如以上配置),则都要添加,不能只给其中一个Portlet添加