jsf - c:forEach runs always the same amount of loops -
hi i'm trying display tree structure in jsf
for intendation want insert
<span class="intendwidth" /> this jsf-code
<ui:repeat value="#{myhandler.entitytree}" var="entitydepthholder"> <p:commandlink action="#{myhandler.toggle(entitydepthholder.entity)}"> <div> <c:foreach begin="0" end="#{entitydepthholder.depth}"> <span class="intendwidth" /> </c:foreach> #{entitydepthholder.depth} #{entitydepthholder.entity.title} </div> </p:commandlink> </ui:repeat> but reason c:foreach run once, although 1 entitydepthholder.depth 1, others 0
any ideas how insert tag n-times without c:foreach?
the <c:foreach> runs during view build time (that moment when xhtml turned jsf component tree), while <ui:repeat> runs during view render time (that moment when jsf component tree produces html output).
so, when <c:foreach> runs, #{entitydepthholder} available in el scope , evaluates null , in case implicitly coerced 0. begin 0 , end inclusive, end 1 item.
after view build time, jsf component tree ends this:
<ui:repeat value="#{myhandler.entitytree}" var="entitydepthholder"> <p:commandlink action="#{myhandler.toggle(entitydepthholder.entity)}"> <div> <span class="intendwidth" /> #{entitydepthholder.depth} #{entitydepthholder.entity.title} </div> </p:commandlink> </ui:repeat> and during view render time, same html repeatedly generated.
you've 2 options fix this:
use
<c:foreach>instead of<ui:repeat>on outer loop. caveat is, breaks view scoped beans in mojarra versions older 2.1.18.use
<ui:repeat>instead of<c:foreach>on inner loop. if happen use jsf utility library omnifaces, may find#{of:createarray()}function helpful in this.<ui:repeat value="#{of:createarray(entitydepthholder.depth)}">
Comments
Post a Comment