以前に閲覧したページの変数が、ダウンストリームで閲覧したページの変数 (たとえば、ah:datatable "var") に干渉したり、置き換えたりする可能性があることを 2 回見ました。
では、 ui:param のスコープは何ですか? それを封じ込める方法はありますか?
以前に閲覧したページの変数が、ダウンストリームで閲覧したページの変数 (たとえば、ah:datatable "var") に干渉したり、置き換えたりする可能性があることを 2 回見ました。
では、 ui:param のスコープは何ですか? それを封じ込める方法はありますか?
基本的に、EL コンテキストで新しい変数マッピングを設定します。のソース コードParamHandler
も参照してください。
94 public void apply(FaceletContext ctx, UIComponent parent)
95 throws IOException {
96 String nameStr = this.name.getValue(ctx);
97 ValueExpression valueVE = this.value.getValueExpression(ctx,
98 Object.class);
99 ctx.getVariableMapper().setVariable(nameStr, valueVE);
100 }
99 行目に注意してください (Mojarra 2.1.0 と同様)。これVariableMapper
は EL コンテキストから を取得し、 as valueを使用して変数マッピングを設定しValueExpression
ます。
これには基本的に「グローバル」スコープがあります。したがって、変数名が「foo」の場合、「foo」を参照する同じ EL コンテキスト (基本的には現在の HTTP リクエスト) で評価されるすべての EL 式は、変数マッパーで指定された値式によって評価されます。 . var
これは、繰り返しコンポーネントがある場合、それよりも優先されます。したがって、これは実際に競合や「空の」ように見えるリピーターにつながる可能性があります。
<ui:param>
または<h:dataTable var>
別の名前を付けたほうがよいでしょう。<ui:param>
たとえば、すべての(および<c:set>
) 変数の前に_
or soを付けることができます。