Po prostu ustawia nowe mapowanie zmiennych w kontekście EL. Zobacz także the source code of 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 }
linia Nota 99 (jak w Mojarra 2.1.0). Spowoduje to pobranie VariableMapper
from the EL context, a następnie sets a variable mapping on it with a ValueExpression
as value.
Ma to w zasadzie zakres "globalny". Więc jeśli nazwa zmiennej to "foo", to każde pojedyncze wyrażenie EL, które jest oceniane w tym samym kontekście EL (w zasadzie bieżące żądanie HTTP), które kiedykolwiek odnosi się do "foo", zostanie ocenione przez wyrażenie wartości określone w zmienny mapper. Ma to wyższy priorytet niż var
powtarzalnych komponentów, jeśli takie istnieją. Może to rzeczywiście prowadzić do konfliktów i "pustych" wyglądających wzmacniaczy.
Lepiej nadaj innej nazwie nazwę <ui:param>
lub <h:dataTable var>
. Można na przykład wybrać przedrostek wszystkich zmiennych <ui:param>
(i <c:set>
) za pomocą _
lub tak.
Myślę, że zakres ui: param jest żądaniem i zostanie nadpisany na każde żądanie. – flash
zobacz moją odpowiedź na Balus, gdyby to była tylko prośba, to nie wpłynęłoby to na inne strony –