在 jsp 页上显示 Arraylist

Display Arraylist on jsp page

我正在尝试在显示的 .jsp 页面中显示以下 ArrayList,但是在 运行 我的 portlet 之后我似乎看不到任何值,问题出在哪里?

code.java

 public class TestPortlet extends MVCPortlet {
    public void displayProcess(ActionRequest request, ActionResponse response) {
        ArrayList<String> process = new ArrayList<>();
        process.add("a");
        process.add("b");
        process.add("c");
        process.add("d");
        process.add("e");

        request.setAttribute("processName", process);
    }
}

jsp页面如图:

<%@ include file="/init.jsp"%>

<jsp:useBean id="processName" class="java.util.ArrayList" scope="request" />

<aui:select id="process" name="processitems">
    <c:forEach items="${processName}" var="process">
        <aui:option value="${process}">
            ${process}
        </aui:option>
    </c:forEach>
</aui:select>

如有任何帮助,我们将不胜感激。

不确定这是否是一个完整的答案,但可以通过一些步骤来找出问题所在。我正在接受你的问题以及一些评论:

您正在实施 portlet 操作处理程序,从那里,您将不会 forward/dispatch 到特定 jsp:portlet 的 ACTION 阶段只适用于更改状态,同时显示结果是 VIEW 阶段的一部分。您发布的代码(虽然它显然已简化)看起来更像是想住在 doView().

事实上,这可能就是您所需要的:如果您仅显示 portlet, VIEW 阶段将被触发。仅显示 portlet 不会 触发操作处理程序,您可以在调试器中对其进行验证。

对于JSP:你说的都是你"can't seem to see"任何结果。验证您的问题出在哪里:列表是否存在?枚举列表是否有效? AUI 标签库有问题吗?您可以通过删除所有其他标签来轻松检查这一点,而是通过删除一点来生成纯输出。

当您查看输出的源代码并且任何 JSP 内容仍然存在时(例如 ${processName}<aui:select..><c:forEach...>,您就会知道这是 "not seeing" 任何事情的根本原因。您可能会错过 taglib 或其他。

最后:我从来没有尝试过这个,但是 <aui:select> 是一个标签,它应该在表单中使用,我不确定它在表单之外做了什么 - 你可能想要用 <aui:form ....> 包围它,然后看看会发生什么。

我找到了解决方案:

我要使用:

public void displayProcess(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {

而不是

 public void displayProcess(ActionRequest request, ActionResponse response) {

在我的方法的底部:

renderRequest.setAttribute("process", process); 
    super.render(renderRequest, renderResponse);

在jsp页面的最顶端;接收您传递的 ArrayList 作为:

<% ArrayList<String> process = (ArrayList) request.getAttribute("process"); %>

.

结果如下: