これは面白いものだと思います。繰り返しの中でSeamコンポーネントへの呼び出し回数を最小限に抑えたい。私はSeam 2.2.1.CR1、Richfaces 3.3.3.Final、JSF 1.2、Faceletsを使用しています。JSF/Richfaces反復の反復スコープ変数?
は以下にfaceletスニペットを見てください:私はここに属性(ROWSPANを計算しています上記のコードで
<rich:datatable value="#{myBean.products}" var="prod">
<rich:column rowspan="#{rowspan.calcHomePageProductRowspan(prod)}">
#{prod.name}
</rich:column>
<rich:column rowspan="#{rowspan.calcHomePageProductRowspan(prod)}">
#{prod.number}
</rich:column>
...
<rich:column rowspan="#{rowspan.calcHomePageProductRowspan(prod)}">
#{prod.somethingElse1}
</rich:column>
<rich:column rowspan="#{rowspan.calcHomePageProductRowspan(prod)}">
#{prod.somethingElse2}
</rich:column>
...
<rich:column rowspan="#{rowspan.calcHomePageProductRowspan(prod)}">
#{prod.somethingElse3}
</rich:column>
</rich:datatable>
を、それは本当に問題ではない、それは任意の属性または値であることができEL式を評価することで、それに集中しないでください)。ご覧のように、値を計算するメソッドは、現在のprodを引数として取ります。
私はrowspan
Seamコンポーネントで内部最適化を行い、すでに計算されたすべての値をHashMapに保持しています。したがって、EL式が第2のrich:column
で評価されるとき、rowspan
は、最初にHashMapですでに計算された値を検索し、それを再度計算する代わりに返します。
これはもう一度やり直すのが良いですが、まだSeamコンポーネントを呼び出す必要があります。何らかの理由でSeamコンポーネントを一度呼び出すしか方法はありません。何らかの形で現在の繰り返しの計算値を保持していますか?
Javaに似ているのは、各繰り返しでループ内に変数を定義し、繰り返し全体で変数を再利用することです。
注:は、私はすでに、このような@BypassInterceptorsなど他のSeam指向の最適化を行った、SeamコンポーネントはEVENTスコープにあるので、何階層検索が行われないなど
JSPまたはFacelets? JSPの場合、ここで終了します(いいえ、JSTL ''は 'UIData'コンポーネントの中でここで助けてくださいません)。 Faceletsの場合は、「」を使用します。 –
BalusC
私はFaceletsを使用しています。質問を編集しました。 –