階層 Bean を処理するカスタム タグに取り組んでいます。Bean は次のようになります。
public class HierarchyBean {
public List<HierarchyBean> children;
public List<SomeOtherBean> someListOfBeans;
// getters/setters for Bean
}
ここで、JSP でこれを実行できるようにタグを作成したいと思います。
<ul>
<cust:hierarchy hierarchyBean="${root}">
<li>${subBean}</li>
</cust:hierarchy>
</ul>
カスタムタグは次のようになります。
<%@ tag body-content="scriptless" %>
<%@ attribute name="hierarchyBean" required="true" rtexprvalue="true" type="com.publix.webforms3.survey.domain.Element" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="cust" tagdir="/WEB-INF/tags/hierarchy" %>
<c:forEach items="${someListOfBeans}" var="bean">
<c:set var="subBean" value="${bean}" scope="page" />
<jsp:doBody />
</forEach>
<ul>
<c:forEach items="${children}" var="child">
<cust:hierarchy hierarchyBean="${root}">
<li>${subBean}</li>
</cust:hierarchy>
</c:forEach>
</ul>
したがって、まず、上記のコードに不適切な間違いがある場合はお詫び申し上げます... 私の実際のプロジェクトは非常に複雑で、より単純な例を手で入力しようとしました。
次に、タグ IS の再帰的な性質が機能していることを指摘したいと思います。うまくいかないのは「subBean」の設定です。c:set を使用する場合と使用しない場合の両方を試しましたが、呼び出し元の JSP コードでは、subBean がタグからタグ内の本体に戻されていないようです。
jsp:doBody にはいくつかの属性、つまり var と varReader があることは知っていますが、どちらも必要なことを行っているようには見えません。
これは可能ですか?もしそうなら、私はここで何が間違っているのでしょうか?