【问题标题】:Name attribute does not get rendered in Liferay Portlet名称属性未在 Liferay Portlet 中呈现
【发布时间】:2013-03-15 20:29:16
【问题描述】:

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

【问题讨论】:

  • 你检查过你的 processAction 方法是否被调用了吗??(即 System.out.println("");)
  • 您在actionRequest.getParameter("name"); 中获得任何价值吗?另一方面,我不确定使用“名称”设置首选项并使用“名称”恢复它是否正确。
  • @Dani:我在哪里可以查看?在 jsp 文件中还是在 Portlet 类中?
  • actionRequest获取后可以简单的打印变量“name”的值
  • 您正在尝试获取“ String name = prefs.getValue("NAME", defaultValue);"但是你像这样保存它“prefs.setValue("Name", name);" ..检查这个..我猜它应该是名称而不是名称

标签: java request liferay liferay-6


【解决方案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);

}

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

【讨论】:

  • 正如我在上一条评论中所说,问题仅仅是“姓名”和“姓名”之间的区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2014-01-21
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多