Est-il possible de définir une variable et de la réutiliser plus tard dans les expressions EL?
Par exemple :
<h:inputText
value="#{myBean.data.something.very.long}"
rendered="#{myBean.data.something.very.long.showing}"
/>
Je pense à quelque chose comme:
<!--
somehow define a variable here like :
myVar = #{myBean.data.something.very.long}
-->
<h:inputText
value="#{myVar}"
rendered="#{myVar.showing}"
/>
Des idées ? Je vous remercie !
Vous pouvez utiliser <c:set>
pour cela:
<c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" />
Cette expression EL sera ensuite évaluée une fois et stockée dans la portée de la demande. Notez que cela ne fonctionne que lorsque la valeur est disponible pendant afficher le temps de génération . Si ce n'est pas le cas, vous devez supprimer l'attribut scope
pour qu'il devienne un véritable "alias":
<c:set var="myVar" value="#{myBean.data.something.very.long}" />
Notez donc que cela ne met pas en cache la valeur évaluée dans la portée de la requête! Il sera réévalué à chaque fois.
N'utilisez pas [~ # ~] [~ # ~] <ui:param>
. Lorsqu'il n'est pas utilisé pour passer un paramètre à template
comme défini dans <ui:composition>
ou <ui:decorate>
, et donc en abusant essentiellement, alors le comportement n'est pas spécifié et en fait ce serait un bogue dans l'implémentation JSF utilisé s'il était possible. Cela ne devrait jamais être invoqué. Voir aussi JSTL dans JSF2 Facelets ... a du sens?
Comme toute vue dans MVC, la page doit être aussi simple que possible. Si vous voulez un raccourci, placez-le dans le contrôleur (le @ManagedBean
ou @Named
haricot).
Manette:
@Named
public MyBean
{
public Data getData()
{
return data;
}
public Foo getFooShortcut()
{
return data.getSomething().getVery().getLong();
]
}
Vue:
<h:inputText
value="#{myBean.fooShortcut}"
rendered="#{myBean.fooShortcut.showing}"
/>