我正在创建一个简单的Liferay Portlet,我无法在输入框中获得一个名称来获得渲染。主要的Portlet类是:
public class MyHelloWorldPortlet extends GenericPortlet {
public void init() {
editJSP = "/html/myhelloworldportlet/edit.jsp";
viewJSP = "/html/myhelloworldportlet/view.jsp";
}
public void processAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
String name = actionRequest.getParameter("name");
PortletPreferences prefs = actionRequest.getPreferences();
prefs.setValue("Name", name);
prefs.store();
actionResponse.setPortletMode(PortletMode.VIEW);
}
public void doEdit(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(editJSP, renderRequest, renderResponse);
}
public void doView(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
PortletPreferences prefs = renderRequest.getPreferences();
String defaultValue = "";
String name = prefs.getValue("NAME", defaultValue);
renderRequest.setAttribute("ATTRIBUTE_NAME", name);
include(viewJSP, renderRequest, renderResponse);
}
protected void include(
String path, RenderRequest renderRequest,
RenderResponse renderResponse)
throws IOException, PortletException {
PortletRequestDispatcher portletRequestDispatcher =
getPortletContext().getRequestDispatcher(path);
if (portletRequestDispatcher == null) {
_log.error(path + " is not a valid include");
}
else {
portletRequestDispatcher.include(renderRequest, renderResponse);
}
}
protected String editJSP;
protected String viewJSP;
private static Log _log = LogFactoryUtil.getLog(MyHelloWorldPortlet.class);
}
edit.jsp文件是:
<form action="<portlet:actionURL/>" method="post" name="<portlet:namespace/>fm">
<label for="<portlet:namespace/>name">Name:</label>
<input name="<portlet:namespace/>name" type="text">
<br/><br/>
<input type="submit" value="Add Name">
</form>
view.jsp文件是:
<%
String name = (String)request.getAttribute("ATTRIBUTE_NAME");
%>
<p>Hello <%= name %>!</p>
问题是视图上的输出总是Hello!。尽管用户在输入框中输入了一个名称,但没有任何名称传递给输出。为什么?
答案 0 :(得分:1)
更改您的doView方法:
public void doView(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
PortletPreferences prefs = renderRequest.getPreferences();
String defaultValue = "";
// you need to recover the preference using the same name you used when you set it
String name = prefs.getValue("Name", defaultValue);
renderRequest.setAttribute("ATTRIBUTE_NAME", name);
include(viewJSP, renderRequest, renderResponse);
}
在我看来,你的其余代码很好。