如何将参数从portlet传递给jsp

时间:2014-06-27 11:46:51

标签: jsp liferay portlet

我正在尝试将参数从portlet传递给新的jsp。我的意思是,view.jsp是我在portlet呈现时看到的第一个页面。此view.jsp包含提交,用户在其中插入ID。该提交会调用处理ID的ProcessAction。一旦ID被处理,我需要将一个参数传递给新的jsp(而不是view.jsp)。提交后应收取newpage.jsp费用。

我怎么能这样做?我一直在寻找解决方案,但我每天都会感到困惑。

更新

是的,我想将参数从我的流程操作传递到JSP。但问题仍然存在,我不知道为什么。我一直在阅读您的链接提供的内容,并且我已经包含了文档建议使其工作的行。但它不起作用。

这是我的代码(行动阶段):

@ProcessAction(name="obtenerExpedientesPorNIF")
public void obtenerExpedientesPorNIF(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

    //code to process the information I need to pass to the render phase (JSP)

    String[] expedientes_nif = null;
    for (int i=0; i<lista_expedientes.size(); i++)
    {
        ExpedienteListItem expediente = lista_expedientes.get(i);
        expedientes_nif[i] = expediente.getNumeroExpediente();
    }

actionResponse.setRenderParameter("lista-expedientes", expedientes_nif);
}

这是另一个(渲染阶段):

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

Insert your ID:<br><br>
<%
String string = renderRequest.getParameter("lista-expedientes");
%>

<portlet:defineObjects />
<portlet:actionURL name="obtenerExpedientesPorNIF" var="addNameUrl">
</portlet:actionURL>
<form action="${addNameUrl}" method="post">
<input name="NIF" type="text"/><br><br>
<input type="submit" value="Realizar búsqueda"/><br>
</form>

我的IDE在此行报告错误:

String string = renderRequest.getParameter("lista-expedientes");

那么,您认为我的代码需要改变哪些变化?

3 个答案:

答案 0 :(得分:3)

我了解您希望将参数从操作阶段传递到渲染阶段(因此可以通过JSP读取)。可以使用渲染参数完成。首先,您必须在操作方法中添加参数:

actionResponse.setRenderParameter("parameter-name", "value");

然后在render方法或JSP文件中读取id:

renderRequest.getParameter("parameter-name");

Liferay's documentation中有一篇关于将值传递到行动阶段的文章

答案 1 :(得分:0)

在使用<portlet:defineObjects />变量之前放置renderRequest标记:

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

Insert your ID:<br><br>
<%
String string = renderRequest.getParameter("lista-expedientes");
%>

答案 2 :(得分:0)

如下所述,我们可以提供动作阶段参数来渲染阶段。

MVCPortlet类将所有操作参数直接复制为渲染参数。您可以通过在portlet.xml中设置以下init-param来实现此目的,

XML:
<init-param>
    <name>copy-request-parameters</name>
    <value>true</value>
</init-param>