调用 renderURL 后 renderRequest 属性始终为 null

renderRequest attributes are always null after calling renderURL

我似乎无法访问要传递到我的 .jsp 文件的数据。我已经将它简化为最简单的系统,但它仍然对我不起作用。此 portlet 正在部署到 liferay 门户。

问题:我点击 link 为下一个 .jsp 页面调用 renderURL。在 doView() 方法中,我使用 setAttribute 设置了一个属性。当我在 .jsp 中检索该属性时,它 returns null.

预期输出:"Proper Value"

实际输出:"Default value"

NewPortlet.java(控制器)

public class NewPortlet extends MVCPortlet {

    @Override
    public void doView(RenderRequest request, RenderResponse response)
            throws IOException, PortletException {
        request.setAttribute("test", "Proper Value");
        String path = ParamUtil
                .getString(request, "path", "/html/new/view.jsp");
        include(path, request, response);
    }
}

view.jsp

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<portlet:renderURL var="testURL">
    <portlet:param name="path" value="/html/new/edit.jsp"/>
</portlet:renderURL>
<p><a href="<%= testURL %>">Click me!</a></p>

edit.jsp

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@page import="com.liferay.portal.kernel.util.ParamUtil"%>

<portlet:defineObjects />
<%
String test = ParamUtil.getString(renderRequest, "test", "default value");
%>
<p><%= test %></p>

"view.jsp" 使用 portlet:renderURL 引用 "edit.jsp",这可能是个问题。 The render requests may be executed sequentially or in parallel without any guaranteed order.

我不确定您的工作流程为何如此(即在 doView 方法中设置参数),但请尝试使用 actionURL 而不是 renderURL。

我不确定你有什么具体用例。

但这里的问题是,您正在设置属性并尝试获取参数,因此它 returns 为空。

如需解决代码中的问题,请使用 renderRequest.getAttribute("test") 或使用 el, ${test}