Один из способов создания специальных шаблонов - использовать 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 ). Вы можете найти что-то в одной из сторонних библиотек компонентов .