我一直在考虑使用jsps中的scriptlet来移除表单的一系列选项。
“混乱”的主要原因往往是打印出ArrayList和其他Collections对象的问题,因为某些与表示相关的标记与某些Java混在一起。
您会建议什么是处理此类情况的最佳解决方案。我正在看Wicket(非常简短),但是如果这有助于清理这种情况就无法解决。
答案 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