调用renderURL后,renderRequest属性始终为null

时间:2015-07-20 17:00:59

标签: java jsp tomcat liferay portlet

我似乎无法访问要传递给我的.jsp文件的数据。我把它简化为简单的东西,它仍然不适合我。此portlet正在部署到liferay门户。

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

预期输出:“正确价值”

实际输出:“默认值”

NewPortlet.java(Controller)

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>

2 个答案:

答案 0 :(得分:2)

我不确定你的用途是什么。

但问题是,您正在设置属性并尝试获取参数,因此它返回null。

要解决您的问题,请使用renderRequest.getAttribute("test")或使用el,${test}

答案 1 :(得分:1)

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

我不确定为什么你的工作流程是这样的(即在doView方法中设置参数),但是尝试使用actionURL而不是renderURL。