在 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"); %>
.
结果如下:
我正在尝试在显示的 .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"); %>
.
结果如下: