如何在JSP中使打印集合对象清洁

时间:2010-09-12 14:58:17

标签: java jsp wicket

我一直在考虑使用jsps中的scriptlet来移除表单的一系列选项。

“混乱”的主要原因往往是打印出ArrayList和其他Collections对象的问题,因为某些与表示相关的标记与某些Java混在一起。

您会建议什么是处理此类情况的最佳解决方案。我正在看Wicket(非常简短),但是如果这有助于清理这种情况就无法解决。

4 个答案:

答案 0 :(得分:5)

如果你使用普通的JSP,没有任何其他Web框架,我建议你看一下JSTL。它为您提供了很多标记来操纵对象。

您的案例中可能感兴趣的一个标记是<c:forEach />标记。它允许您在JSP页面中使用for-each循环。

有关更多信息,请参阅以下链接:

答案 1 :(得分:3)

JSTL有:

<c:forEach items="${list}" var="item">
   ${item}
</c:forEach>

您应该将列表作为名为list的请求属性。

查看其他JSTL标记以摆脱scriptlet。

答案 2 :(得分:1)

我相信几乎每个更高级别的Web API都可以帮助您实现这些目标。

对于Wicket,我找到了Repeaters

  

中继器是可以多次渲染其身体标记的组件。这些组件对于创建传统上通过循环创建的输出非常有用。

例如,使用ListView,您可以do this

代码:

List list = Arrays.asList(new String[] { "a", "b", "c" });
ListView listview = new ListView("listview", list) {
    protected void populateItem(ListItem item) {
        item.add(new Label("label", item.getModel()));
    }
};

标记:

<span wicket:id="listview">
   this label is: <span wicket:id="label">label</span><br/>
</span>

将导致以下内容呈现给浏览器:

<span wicket:id="listview">
   this label is: <span wicket:id="label">a</span><br/>
</span><span wicket:id="listview">
   this label is: <span wicket:id="label">b</span><br/>
</span><span wicket:id="listview">
   this label is: <span wicket:id="label">c</span><br/>
</span>

该页面上还有更多高级示例。

对于JSF来说,有:

  • <ui:repeat>,类似于 JSTL的forEach其他海报 已经指出了。
  • <ui:dataTable>,类似于Wicket的ListView

希望有所帮助!

答案 3 :(得分:0)

如果您的标记逻辑被纠缠在一起,您最好使用 MVC-Pattern 模型 - 视图 - 控制器)将它们分开)。

请参阅此处:http://en.wikipedia.org/wiki/Model - View-Controller#Java:_Java_Platform.2C_Enterprise_Edition_.28Java_EE.29;或者在这里:http://www.oracle.com/technetwork/java/javaee/overview/index.html