Ist es möglich, eine Variable zu definieren und diese später in EL-Ausdrücken wiederzuverwenden?
Beispielsweise :
<h:inputText
value="#{myBean.data.something.very.long}"
rendered="#{myBean.data.something.very.long.showing}"
/>
Was ich vorhabe, ist so etwas wie:
<!--
somehow define a variable here like :
myVar = #{myBean.data.something.very.long}
-->
<h:inputText
value="#{myVar}"
rendered="#{myVar.showing}"
/>
Irgendwelche Ideen ? Vielen Dank !
Sie können dafür <c:set>
verwenden:
<c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" />
Dieser EL-Ausdruck wird dann einmal ausgewertet und im Anforderungsbereich gespeichert. Beachten Sie, dass dies nur funktioniert, wenn der Wert während Erstellungszeit anzeigen verfügbar ist. Wenn dies nicht der Fall ist, müssen Sie das Attribut scope
entfernen, damit es zu einem echten "Alias" wird:
<c:set var="myVar" value="#{myBean.data.something.very.long}" />
Beachten Sie daher, dass dieser den ausgewerteten Wert nicht im Anforderungsbereich zwischenspeichert ! Es wird jedes Mal neu bewertet.
Verwenden Sie [~ # ~] nicht [~ # ~] <ui:param>
. Wenn ein Parameter nicht verwendet wird, um ihn an template
zu übergeben, wie in <ui:composition>
Oder <ui:decorate>
Definiert, und damit im Wesentlichen missbraucht wird, ist das Verhalten nicht spezifiziert und tatsächlich es wäre ein Fehler in der verwendeten JSF-Implementierung, wenn dies möglich wäre. Darauf sollte man sich niemals verlassen. Siehe auch JSTL in JSF2-Facelets ... macht Sinn?
Wie bei jeder Ansicht in MVC sollte die Seite so einfach wie möglich sein . Wenn Sie eine Verknüpfung möchten, fügen Sie die Verknüpfung in den Controller ein . ) (die Bean @ManagedBean
oder @Named
).
Regler:
@Named
public MyBean
{
public Data getData()
{
return data;
}
public Foo getFooShortcut()
{
return data.getSomething().getVery().getLong();
]
}
Aussicht:
<h:inputText
value="#{myBean.fooShortcut}"
rendered="#{myBean.fooShortcut.showing}"
/>