Java 名称属性未在Liferay Portlet中呈现
我正在创建一个简单的liferayportlet,但我无法获得输入框中给定的名称来进行渲染。主要的Portlet类是:Java 名称属性未在Liferay Portlet中呈现,java,request,liferay,liferay-6,Java,Request,Liferay,Liferay 6,我正在创建一个简单的liferayportlet,但我无法获得输入框中给定的名称来进行渲染。主要的Portlet类是: public class MyHelloWorldPortlet extends GenericPortlet { public void init() { editJSP = "/html/myhelloworldportlet/edit.jsp"; viewJSP = "/html/myhelloworldportlet/view.jsp"; } pub
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>
<%
String name = (String)request.getAttribute("ATTRIBUTE_NAME");
%>
<p>Hello <%= name %>!</p>
姓名:
view.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>
<%
String name = (String)request.getAttribute("ATTRIBUTE_NAME");
%>
<p>Hello <%= name %>!</p>
你好!
问题是视图上的输出总是Hello!。尽管用户在输入框中输入了名称,但不会向输出传递任何名称。为什么? 更改doView方法:
公共视图(
渲染请求渲染请求,渲染响应渲染响应)
抛出IOException、PortletException{
PortletPreferences prefs=renderRequest.getPreferences();
字符串defaultValue=“”;
//您需要使用设置首选项时使用的名称恢复首选项
String name=prefs.getValue(“name”,defaultValue);
setAttribute(“属性名称”,名称);
包括(viewJSP、renderRequest、renderResponse);
}
在我看来,您的代码的其余部分还可以。您是否检查了processAction方法是否被调用??(即System.out.println(“”;)您是否在
actionRequest.getParameter(“名称”)中获得了任何值代码>?另一方面,我不确定用“Name”设置首选项并用“Name”恢复它是否正确。@Dani:我在哪里可以检查它?在jsp文件或Portlet类中?从actionRequest
获取变量“name”后,您可以简单地打印变量“name”的值,您试图获取“String name=prefs.getValue(“name”,defaultValue)”;“但您是这样保存的”prefs.setValue(“name”,name);”。。我想应该是Name instad of Name,正如我在上一篇评论中所说的,问题仅仅是“Name”和“Name”之间的区别。