Es legt grundsätzlich eine neue Variablenzuordnung im EL-Kontext fest. Siehe auch 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 }
Hinweis Linie 99 (wie in Mojarra 2.1.0). Dies ruft die VariableMapper
from the EL context und dann sets a variable mapping on it with a ValueExpression
as value ab.
Dies hat grundsätzlich den "globalen" Anwendungsbereich. Wenn also der Variablenname "foo" ist, dann wird jeder einzelne EL-Ausdruck, der im selben EL-Kontext (im Grunde die aktuelle HTTP-Anfrage) ausgewertet wird, welcher immer "foo" referenziert, durch den Wertausdruck wie in der Variablen-Mapper. Dies hat eine höhere Priorität als die var
der sich wiederholenden Komponenten, falls vorhanden. Das kann also zu Konflikten und "leer" aussehenden Repeatern führen.
Besser geben Sie entweder die <ui:param>
oder die <h:dataTable var>
einen anderen Namen. Sie könnten zum Beispiel wählen, dass alle <ui:param>
(und <c:set>
) Variablen mit _
oder so vorangestellt werden.
Ich denke, der Umfang von UI: Param ist Anfrage und wird bei jeder Anfrage überschrieben werden. – flash
sehe meine Antwort auf Balus, wenn es nur die Anfrage war, dann würde es andere Seiten nicht beeinflussen –