JSF中<ui:param>的范围是什么?

Man*_*noi 11 jsf

我已经看过2次来自先前浏览过的页面的变量可能会干扰或替换下游查看的页面中的变量(例如ah:datatable"var").

那么ui:param的范围是什么?有没有办法控制它?

Bal*_*usC 7

它基本上在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    }
Run Code Online (Sandbox Code Playgroud)

注意第99行(如Mojarra 2.1.0).这VariableMapper将从EL上下文中检索,然后使用ValueExpressionas值设置变量映射.

这基本上具有"全球"范围.因此,如果变量名称为"foo",那么在同一个EL上下文(基本上是当前的HTTP请求)中计算的每个 EL表达式都将通过变量映射器中指定的值表达式进行计算. .var如果有的话,它的优先级高于重复组件的优先级.所以这可能确实会导致冲突和"空洞"的中继器.

更好地给出<ui:param><h:dataTable var>不同的名称.例如,您可以选择在所有<ui:param>(和<c:set>)变量前加上前缀_.