1

階層 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 があることは知っていますが、どちらも必要なことを行っているようには見えません。

これは可能ですか?もしそうなら、私はここで何が間違っているのでしょうか?

4

1 に答える 1

2

タグに次を追加する必要があります。

<%@ variable name-given="subBean" scope="NESTED" %>

これにより、コンテナーはページに subBean 属性の値を保存し (存在する場合)、タグを呼び出して、タグによって定義された subBean 変数をタグの本体で使用できるようにし、subBean の保存された値を復元します。属性。

詳細はこちら

于 2012-12-03T20:13:45.093 に答える