当前位置: 首页 > 知识库问答 >
问题:

Liferay portlet-将字符串数组从actionRequest传递到render相

阙项禹
2023-03-14

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

我能够使用String something=(String)pref传递一些字符串值。getValue(“某物”、“某物”) 但这对数组不起作用。

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

<portlet:actionURL var="loadMessages" name="loadMessages">
    <portlet:param name="jspPage" value="/view.jsp" />
</portlet:actionURL>

这是我的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!");
        }

    }

到目前为止效果很好:我正在加载x条消息信息。

当我想在我的display.jsp文件中访问这个数组时,问题就出现了:

<%
String[] messages = (String[])renderRequest.getAttribute("messages");

if (messages == null) {
    System.out.println("NULL MESSAGES");
} else {
    System.out.println(messages[0]);
}
%>

我得到,我的数组在这里是空的?要访问我在actionRequest阶段保存的阵列,我需要做哪些更改?

第二个问题:是否可以将Java对象传递给。jsp页面?我猜想这只适用于字符串,但使用对象肯定很酷!

感谢任何回答!


共有3个答案

茅星华
2023-03-14

看看这个页面。它是LifeRay留档,将信息从动作阶段传递到渲染阶段。

基本上,您可以使用actionResponse。setRenderParameter(“键”,数据) 将对象从动作方法转发到doView方法。在doView中,您可以通过请求获得它。getParameter(“键”)

对于Portlet来说,这是相当标准的,在我看来,这比使用会话更受欢迎,不管链接怎么说。使用会话意味着您必须确保不会向会话添加太多内容,并且不会给portlet容器带来很大的内存开销。对于一个用户来说,内存可能不多,但对于一个大而繁忙的站点来说,它可以快速累积起来,使您的服务器瘫痪,或者要求您需要比站点真正需要的更多的硬件。

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

于恺
2023-03-14

可以将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}"/>

我不知道这是不是一个好方法:)
希望这有帮助。

鞠征
2023-03-14

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

 actionRequest.setAttribute("messages", messagesObject);

您可以使用

res.setRenderParameter("mvcPath", "jspPath");

res.setRenderParameter("jspPage", "jspPath"); (this one is deprecated now)

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

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

试试这个让我知道如果你有任何问题

 类似资料:
  • 问题内容: 我有一个字符串数组一样,我想这个数组发送到 ç 使用 JNI 。我找不到任何明确的解决方案。我试图将此字符串视为成功,但没有成功。 有没有办法做到这一点? 问题答案: 您可以编写一个简单的函数,该函数接受一个对象,将每个对象强制转换为jstring,然后对其进行调用。 像这样:

  • 是否可以将字符串数组从feeder传递到post请求。 我的csv文件: 我的加特林剧本 我收到的错误消息: 看起来Gatling没有正确地接收馈线数据,我猜断点是字符串数组值传递给Gatling post请求的方式,有什么方法可以实现这一点吗?

  • 问题内容: 我有一个PHP脚本,可以从数据库中检索名称(字符串)。我想使用$ .ajax()将此数组传递给Javascript。我不明白如何在PHP中对数组进行编码,然后在Javascript中对其进行解码。有人可以为此提供示例代码吗?非常感谢 !! 问题答案: HTML档案:

  • 我试图在php脚本和c程序之间传递参数。我的php脚本如下所示 然后我想我的c程序返回给我一个字符串(但我真的不知道怎么做),你能帮忙吗?

  • 问题内容: 背景: 我创建了一个非常简单的前端,用户可以在其中输入字符串。输入并单击“检查”按钮后,我想将此字符串作为JSON传递给python字符串,它将在其中进行SQL查找。根据SQL外观,python脚本应传递一个布尔值,该值应更改?到✔或✘。 题: 一旦按下“检查”按钮作为JSON到Python脚本,然后如何将字符串从Python传递到HTML,将?更改为✔或✘,如何传递字符串? 研究:

  • 我是aws lambda和api网关的新手,我正在尝试向lambda函数传递一个json字符串。 但是,lambda不是用字符串调用的。 这是lambda。它获取一个对象作为输入,并返回类的字符串表示形式和对象的值。 api网关的映射模板是 api网关测试中的日志显示: 我希望json字符串被传递给lambda(作为字符串对象),但是TestMapping lambda返回的不是这个 如您所见,L