2010-12-13 101 views
1

Je veux faire quelque chose de similaire à ce (en JSF 1.2):Accéder aux méthodes de bean à partir de pages JSF 1.2 - cycle de vie de crochet? pirater des getters?

<html> 
... 
#{myObject.foreignKey(parentObject.primaryKey)} 

<h:inputText value="#{myObject.myProperty}"/> 
</html> 

Ou en d'autres termes: à partir de la page Web Je veux définir une valeur dans un objet en arrivant sur cette page.

alors que c'est facile dans JSF 2.0, cela semble un peu impossible dans JSF 1.2 Y a-t-il un bidouillage/une solution de contournement pour cela? Définir une fonction qui prend comme argument un objet et une chaîne/entier et travaille sur l'objet retourné? Remplacer inputText (et tous les autres champs de saisie) et accéder à toutes les classes liées au framework semble être sale

Répondre

1

Ceci n'est pas spécifique à l'implémentation JSF mais à l'implémentation EL. Dans l'implémentation EL standard avant EL 2.2 from Java EE 6, vous ne pouvez pas passer des arguments de méthode comme ça. En dehors de la mise à niveau vers un conteneur de servlets prenant en charge EL 2.2 (Tomcat 7, Glassfish 3, JBoss 6, etc.), vous pouvez également remplacer vous-même l'implémentation EL. Un couramment utilisé pour atteindre l'exigence particulière est JBoss-EL. Télécharger et mettre jboss-el.jar dans /WEB-INF/lib et d'ajouter ce qui suit à la web.xml, en supposant que vous utilisez Mojarra comme la mise en œuvre de JSF:

<context-param>  
    <param-name>com.sun.faces.expressionFactory</param-name> 
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> 
</context-param> 

Une alternative est juste en utilisant JSTL<c:set>:

<html xmlns="java.sun.com/jsp/jstl/core"> 
... 
<c:set target="#{myObject}" scope="request" property="foreignKey" value="#{parentObject.primaryKey}" /> 

Notez que les Facelets 'builtin JSTL libs sur xmlns:c="java.sun.com/jstl/core" contient également un c:set, mais cela est très limité dans la fonctionnalité. Le xmlns:c="java.sun.com/jsp/jstl/core" nécessite une librairie JSTL complète, qui est généralement déjà livrée avec un servletcontainer un peu à part. Cependant, dans Apache Tomcat par exemple, vous devez le télécharger et l'installer vous-même. Pour les liens et plus de détails, voir our JSTL wiki page.

+0

Je suis assez frustrant: L'attribut 'var' est requis lors de la dernière approche. Remettre un mannequin comme var fait juste ignorer la cible. Peut-être que nous utilisons une librairie EL spéciale ou qu'il me manque quelque chose (nous utilisons Spring). Je dois y jeter un coup d'oeil demain encore, je le crains. – Toskan

+0

mon c: set attribut 'var' est requis erreur résultait de l'ancien JSTL 1.0 xmlns ... par exemple. xmlns: c = "http://java.sun.com/jstl/core" au lieu de xmlns: c = "http://java.sun.com/jsp/jstl/core" (http: //www.jsptutorial .org/content/jstl en allemand). Au problème: bien je n'ai pas pu vérifier que jstl c: set fonctionne, il n'a jamais appelé le setter pour moi avec JBoss 4.2.2. J'ai trouvé des tas d'exemples pour JSP, mais pas un seul avec JSF. – Toskan

+0

semble que je suis encore trébucher dans le noir depuis que je ne peux pas obtenir le plus récent .../jsp/jstl/.. balises fonctionnant du tout. Il semble qu'il y ait un peu de confusion ... voir http://stackoverflow.com/questions/2373592/how-do-you-use-jstl. Je vais aussi utiliser xhtml – Toskan