名称属性未在Liferay Portlet中呈现

时间:2013-03-15 12:00:17

标签: java request liferay liferay-6

我正在创建一个简单的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!。尽管用户在输入框中输入了一个名称,但没有任何名称传递给输出。为什么?

1 个答案:

答案 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);

}

在我看来,你的其余代码很好。