我正在使用Liferay portal 5.x. 我已经部署了一个简单的portlet(使用jsp& servlet扩展GenericPortlet)。 此portlet将包含用户名&密码字段。我能够在查看模式下看到该表单。 但是当我提交表单时,操作将转到Portlet类的processAction()但是用户名&密码请求参数变为空。
有什么想法吗?
答案 0 :(得分:2)
这是JSR 168还是286 portlet?
听起来你确信实际上正在调用processAction()
方法。如果没有,我会先验证一下。关键是表单上有action属性。您是否使用actionURL标记在JSP上呈现action属性?
也就是说,每当我发现对getParameter()
的调用返回null时,就意味着我拼错了参数,无论是在表单中输入元素的name属性中,还是在{{1}的参数中}。此外,参数区分大小写。
您是否有机会使用表单代码和getParameter()
方法更新您的问题?
这是一个示例portlet(JSR 286),它提取请求参数(包括语句和导入的导入):
processAction()
以下是JSP示例:
public class TestPortlet extends GenericPortlet {
public void init() throws PortletException {
super.init();
}
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/jsp/view.jsp");
rd.include(request,response);
}
public void processAction(ActionRequest request, ActionResponse response) throws PortletException {
System.err.println(request.getParameter("username"));
System.err.println(request.getParameter("password"));
}
}
答案 1 :(得分:0)
我们应该添加名称前缀。
<input type="text" name="<portlet:namespace/>username">
答案 2 :(得分:0)
为每个属性添加名称空间很麻烦。避免对参数命名的另一种方法是在liferay-portlet.xml中将属性require-namespaced-parameters设置为false
<portlet>
<portlet-name>portlet-name</portlet-name>
<icon>/icon.png</icon>
<!-- Set this property to false to avoid namespacing parameters -->
<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-name-portlet</css-class-wrapper>
</portlet>