Java Liferay portlet-将字符串数组从actionRequest传递到RenderPase

Java Liferay portlet-将字符串数组从actionRequest传递到RenderPase,java,jsp,liferay,portlet,Java,Jsp,Liferay,Portlet,我在Liferay门户上有一个portlet,在其中我从.jsp页面调用操作。我想将一个字符串数组传递给另一个.jsp页面,该页面将显示该数组。但是,根本没有传递任何值 我能够使用stringsomething=(String)prefs.getValue(“something”,“something”)传递一些字符串值但这对数组不起作用 这是我调用actionRequest的view.jsp(我将只显示部分代码,否则会太长): 这是我的Java类中的loadMessages()函数: pu

我在Liferay门户上有一个portlet,在其中我从.jsp页面调用操作。我想将一个字符串数组传递给另一个.jsp页面,该页面将显示该数组。但是,根本没有传递任何值

我能够使用stringsomething=(String)prefs.getValue(“something”,“something”)传递一些
字符串值但这对数组不起作用

这是我调用actionRequest的view.jsp(我将只显示部分代码,否则会太长):


这是我的Java类中的loadMessages()函数

public void loadMessages(ActionRequest actionRequest, ActionResponse actionResponse)
    throws IOException, PortletException {

        manager.loadFromDB();   
        ArrayList<Message> messagesObject = manager.getMessages();

        // we must save our messages as strings     
        String[] messages = new String[messagesObject.size()];

        for (int i=0; i<messagesObject.size(); i++) {
            String msg = "";
            Message message = messagesObject.get(i);

            msg += message.getMsgid() + "\n"; 
            msg += message.getSender() + "\n"; 
            msg += message.getReceiver() + "\n"; 

            messages[i] = msg;
        }

        // save
        if (messages != null) {
            actionRequest.setAttribute("messages", messages);   
            System.out.println(messages.length + " messages loaded!");
        }

    }
公共无效加载消息(ActionRequest ActionRequest、ActionResponse ActionResponse)
抛出IOException、PortletException{
loadFromDB();
ArrayList messagesObject=manager.getMessages();
//我们必须将消息保存为字符串
String[]messages=新字符串[messagesObject.size()];

对于(int i=0;i,可以将java对象放入Portlet会话中:

<% 
JavaObject javaObject = new JavaObject(); 
renderRequest.getPortletSession().setAttribute("javaObjectAttr", javaObject);
%>

然后,您可以在另一个jsp页面中获取此对象:

<%
JavaObject javaObject = (JavaObject)portletSession.getAttribute("javaObjectAttr");
pageContext.setAttribute("javaObject", javaObject);
%>

<c:out value="${javaObject.firstName}"/>

我不知道这到底是不是个好办法:)

希望这有帮助。

可以将java对象放入Portlet会话:

<% 
JavaObject javaObject = new JavaObject(); 
renderRequest.getPortletSession().setAttribute("javaObjectAttr", javaObject);
%>

然后,您可以在另一个jsp页面中获取此对象:

<%
JavaObject javaObject = (JavaObject)portletSession.getAttribute("javaObjectAttr");
pageContext.setAttribute("javaObject", javaObject);
%>

<c:out value="${javaObject.firstName}"/>

我不知道这到底是不是个好办法:)

希望这有帮助。

您可以将整个消息列表设置为属性

i、 e

您可以使用

i、 e

在jsp部分中,您可以使用jstlc:foreach访问这些值

i、 e


试试这个
如果您有任何问题,请告诉我,您可以将整个消息列表设置为属性

i、 e

您可以使用

i、 e

在jsp部分中,您可以使用jstlc:foreach访问这些值

i、 e


试试这个 如果您有任何问题,请告诉我。这是有关将信息从操作阶段传递到渲染阶段的LifeRay文档

基本上,您可以使用
actionResponse.setRenderParameter(“key”,data);
将对象从操作方法转发到doView方法。在doView中,您可以使用
request.getParameter(“key”);

这对于portlet来说是相当标准的,在我看来,这比使用会话要好得多,不管链接怎么说。使用会话意味着您必须确保不会向会话中添加太多内容,并且不会给portlet容器带来很大的内存开销。对于一个用户来说,它可能没有太多内存,但对于一个大型繁忙的站点来说,它可以快速添加并使服务器崩溃,或者要求您需要比站点实际需要更多的硬件

文章还提到使用init参数自动将所有动作参数复制到渲染动作,这是另一个可行的选项。

请看一下。这是有关将信息从动作阶段传递到渲染阶段的LifeRay文档

基本上,您可以使用
actionResponse.setRenderParameter(“key”,data);
将对象从操作方法转发到doView方法。在doView中,您可以使用
request.getParameter(“key”);

这对于portlet来说是相当标准的,在我看来,这比使用会话要好得多,不管链接怎么说。使用会话意味着您必须确保不会向会话中添加太多内容,并且不会给portlet容器带来很大的内存开销。对于一个用户来说,它可能没有太多内存,但对于一个大型繁忙的站点来说,它可以快速添加并使服务器崩溃,或者要求您需要比站点实际需要更多的硬件


文章还提到使用init参数自动将所有操作参数复制到渲染操作,这是另一个可行的选项。

你能给我一个例子,说明如何在我的jsp文件中获取数组列表吗?它说数组列表“无法解析为类型”…你需要导入jstl标记库。。“它说找不到-我甚至把它作为taglib添加到web.xml conf文件中…你的jsp是否给出编译错误?如果没有,那么试着运行你的代码并检查你是否得到消息列表let us你能给我一个例子说明如何在我的jsp文件中得到数组列表吗?它说“无法解析为类型”对于数组列表…您需要导入jstl标记库。。"它说找不到-我甚至把它作为taglib添加到web.xml conf文件中…你的jsp是否给出编译错误?如果没有,那么试着运行你的代码并检查你是否得到消息列表。告诉我们我已经阅读了本教程-我能够以这种方式传递字符串。问题是如何以这种方式传递整个数组。当我需要对数组进行如下测试:“String[]messages=(String[])renderRequest.getParameter(“messages”);”,它表示无法将String解析为String[]。您可以提供一个工作示例吗?我已经阅读了本教程-我能够以这种方式传递字符串。问题是如何以这种方式传递整个数组。当我请求这样的数组时:“String[]messages=(String[])renderRequest.getParameter(“messages”);”,它表示无法将字符串解析为String[].你能否提供一个有效的例子?
 actionRequest.setAttribute("messages", messagesObject);
res.setRenderParameter("mvcPath", "jspPath");
res.setRenderParameter("jspPage", "jspPath"); (this one is deprecated now)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:forEach var="message" items="${messages}">
   <c:out value="${message.sender}"/>
</c:forEach>