wake-up-neo.com

Definieren und Wiederverwenden einer EL-Variablen in der JSF-Seite

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 !

56
bertie

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?

104
BalusC

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}"
/>
20
Matt Ball