做特别模板的一种方法是使用Facelets而不是JSP。由于这些已成为JSF 2.0的一部分(在JEE6中提供),我认为现在是考虑它们的好时机。
例如,对于豆:
public class LiBean implements Serializable {
private static final long serialVersionUID = 1L;
private String href;
private String title;
public String getHref() { return href; }
public void setHref(String href) { this.href = href; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
}
...和:
public class UlBean implements Serializable {
private static final long serialVersionUID = 1L;
private final List<LiBean> listItems = new ArrayList<LiBean>();
public UlBean() {
String[] links = { "http://www.sun.com", "Sun",
"http://www.oracle.com", "Oracle",
"http://www.ibm.com", "IBM",
"http://stackoverflow.com",
"<stackoverflow.com> & encoded output" };
for (int i = 0; i < links.length; i++) {
LiBean item = new LiBean();
item.setHref(links[i]);
item.setTitle(links[++i]);
listItems.add(item);
}
}
public List<LiBean> getListItems() {
return listItems;
}
}
...在会话范围定义:
<managed-bean>
<managed-bean-name>ulBean</managed-bean-name>
<managed-bean-class>beans.UlBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
...可以是用于此Facelet页面:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>repeat</title>
</head>
<body>
<ul>
<ui:repeat value="#{ulBean.listItems}" var="item">
<li><a href="#{item.href}"><h:outputText
value="#{item.title}" /></a></li>
</ui:repeat>
</ul>
</body>
</html>
......产生这种输出:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>repeat</title>
</head>
<body>
<ul>
<li><a href="http://www.sun.com">Sun</a></li>
<li><a href="http://www.oracle.com">Oracle</a></li>
<li><a href="http://www.ibm.com">IBM</a></li>
<li><a href="http://stackoverflow.com"><stackoverflow.com> & encoded output</a></li>
</ul>
</body>
</html>
如果您在使用JSP坚持,没有在核心实现任何将让你这样做(唯一的重复控制是dataTable)。您可能会在3rd party component libraries中找到某种东西。
也许值得补充的是,Facelets在混合JSF组件和标准HTML(不需要f:verbatim)时没有问题。如果需要,您可以直接添加列表项目。 – Damo 2009-06-18 15:15:22