Liferay 6开发学习(二十九):在后端取不到form表单的值
在使用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是一样的。
今天被这个问题烦了一个下午,原来如此。。。
同样被这问题折磨了2天,真是无语了,作者好牛X
<form action="?name=lucy” method=”post”> 可以这样传参数吗
可以,前是前面的地址也是要标签生成的地址。