2012-01-10 15 views
0

私はJSFとfaceletsが初めてです。なぜ私は期待された結果を得ていないのだろうと思っていたのですか? Facelets 1.1.14でJSF 1.2を使用しています。私は、セッション変数 'indx'がループの後に孫の総数を保持することを期待しています。ループの後にセッション変数が更新されない - JSF

代わりに常に0です。間違っていますか?ここに私のコードです...

<h:form> 
    <c:set var="indx" value="0" scope="session"></c:set> 
    <ui:repeat value="#{grandparentholder.grandparents}" var="grandparent"> 
     <ui:repeat value="#{grandparent.parents}" var="parent"> 
      <ui:repeat value="#{parent.child}" var="child"> 
       <c:set var="indx" value="#{indx+1}" scope="session"></c:set> 
      </ui:repeat> 
     </ui:repeat> 
    </ui:repeat> 
</h:form> 

答えて

0

Taglibs uiとcは同じライフサイクルを持っていません。

これはできません。

何を正確にしたいですか?

1

JSFタグとJSTLタグは、コーディングのように同期して動作しません。長編ストーリー:JSTL in JSF2 Facelets... makes sense?

あなたの特定の問題を別の方法で解決する必要があります。それを行う方法は、具体的な機能要件に依存します。私はあなただけ利用可能なすべての子どもたちをカウントすることを正しくあなたを理解する場合は、代わりに<ui:repeat>

<c:set var="indx" value="0" scope="session" /> 
<c:forEach items="#{grandparentholder.grandparents}" var="grandparent"> 
    <c:forEach items="#{grandparent.parents}" var="parent"> 
     <c:forEach items="#{parent.child}" var="child"> 
      <c:set var="indx" value="#{indx+1}" scope="session" /> 
     </c:forEach> 
    </c:forEach> 
</c:forEach> 

<c:forEach>を必要とするか、またはセッションにジョブを委任するバッキングBeanスコープ、カウントを返すためにゲッターを提供しています。

private int indx; 

public void init() { 
    int indx = 0; 

    for (Grandparent grandparent : grandparents) { 
     for (Parent parent : grandparent.getParents()) { 
      for (Child child : parent.getChild()) { // getChildren()?? 
       indx++; 
      } 
     } 
    } 

    this.indx = indx; 
} 

public int getIndx() { 
    return indx; 
} 
+0

申し訳ありませんが、これは... '' ' – bigchocdad

関連する問題