0

シンプルな Liferay ポートレットを作成していますが、入力ボックスに指定された名前をレンダリングすることができません。主なポートレット クラスは次のとおりです。

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! であることです。ユーザーが入力ボックスに名前を入力しても、出力に渡される名前はありません。なんで?

4

1 に答える 1

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

}

私の意見では、コードの残りの部分は問題ありません。

于 2013-03-15T12:29:16.810 に答える