Как отмечалось в руководстве по стилю JSP почти десятилетие назад:
Где возможно, избегайте JSP-скриптлетов, когда библиотеки тегов предоставляют эквивалентную функциональность. Это облегчает чтение и обслуживание страниц, помогает отделить бизнес-логику от логики представления и упрощает превращение ваших страниц в страницы в стиле JSP 2.0 ...
Рекурсия с шаблонами сложна, но это может быть сделано.
Вот объект уровня представления, который адаптирует ваши объекты к чему-то, что может быть использовано EL, может обрабатывать исключения и т. Д .:
public class RelationshipPresentation {
private final ExtendsRelationshipService service;
private final ExtendsRelationship relationship;
public RelationshipPresentation(ExtendsRelationshipService service,
ExtendsRelationship relationship) {
this.service = service;
this.relationship = relationship;
}
public String getName() { return relationship.getName(); }
public List<RelationshipPresentation> getRelated() {
List<RelationshipPresentation> list =
new ArrayList<RelationshipPresentation>();
try {
for (ExtendsRelationship er :
service.findIncomingExtendsKERelationships(relationship)) {
list.add(new RelationshipPresentation(service, er));
}
} catch (Exception e) { /*Catching Exception?!*/ }
return list;
}
}
Также легко провести модульное тестирование этого типа отдельно от вашей разметки.
Это помещено в область до отправки JSP:
RelationshipPresentation relationshipPresentation =
new RelationshipPresentation(ers, knowledgeElement);
request.setAttribute("relationshipPresentation", relationshipPresentation);
getServletContext().getRequestDispatcher("/ercontainer.jsp")
.forward(request, response);
Вот фрагмент JSP (er.jsp
), который отображает имена в неупорядоченных списках:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="${relationshipPresentation.name}" />
<ul>
<c:forEach var="relationshipPresentation"
items="${relationshipPresentation.related}">
<c:set var="relationshipPresentation"
value="${relationshipPresentation}" scope="request"/>
<li><jsp:include page="er.jsp"/></li>
</c:forEach>
</ul>
Это может быть включено в вашу главную страницу с действием JSP <jsp:include page="er.jsp" />
.