Alors que la mise à niveau de la version JSF d'une ancienne application web de MyFaces 1.1 à 2.2.12 MyFaces, je suis en train de remplacer les entrées <managed-bean>
dans mon fichier faces-config.xml
avec @ManagedBean
annotations directement dans le haricot Des classes. J'utilise Migrating from JSF 1.2 to JSF 2.0 comme guide général pour la migration.Vous ne trouvez pas les haricots annotés avec @ManagedBean
Par exemple, je remplace quelque chose comme
<managed-bean>
<managed-bean-name>MyBean</managed-bean-name>
<managed-bean-class>some.package.MyBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
avec
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class MyBean {
Selon Are there going to be two instances for a bean if I write @managed bean annotation and define same in faces-config.xml, les annotations sont remplacées par les entrées correspondantes dans le faces-config.xml
, donc je supprimé l'élément <managed-bean>
dans mon faces-config.xml
.
Depuis que le projet se compose de plusieurs modules maven qui sont emballés comme des pots individuellement avant d'être déployés en tant que fichier de guerre combiné, j'ai essayé aussi de suivre les conseils de How does JSF find beans annotated with @ManagedBean? et a ajouté un autre dossier META-INF
contenant un faces-config.xml
à la sous-module contenant la fève , à l'adresse suivante (en respectant la réponse acceptée dans How to reference JSF managed beans which are provided in a JAR file?):
MainProject
| SubModule
| |src
| | main
| | resources
| | META-INF
| | faces-config.xml
avec le contenu suivant:
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
Malheureusement, je reçois toujours l'erreur suivante en essayant d'ouvrir la page qui utilise ce haricot spécifique:
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'MyBean' resolved to null
Depuis que je suis en utilisant JSF pour la gestion des haricots, j'ai suivi la partie JSF des instructions Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable, mais même après vérifiant les points individuels mentionnés là-bas, j'ai toujours la même erreur. J'utilise Tomcat 7 comme conteneur de servlet, qui - selon http://tomcat.apache.org/whichversion.html - prend en charge la spécification de servlet jusqu'à la version 3.0, ce qui, à son tour, devrait suffire pour JSF 2.2, qui - si je comprends bien - nécessite au moins une spécification de servlet 2,5, selon http://myfaces.apache.org/core22/.
J'ai déjà beaucoup cherché pour la cause du problème (comme mentionné, j'ai essayé plusieurs des articles SO mentionnés ci-dessus), mais ne peut toujours pas résoudre le problème. Je serais très reconnaissant pour toute aide!
Petite suggestion: Avec JSF 2.3, l'annotation '@ ManagedBean' est déconseillée en faveur de l'utilisation du CDI' @ Named'. Ce ne serait pas le bon moment pour passer directement à cela au lieu de @ManagedBean? – Kukeltje
@Kukeltje Merci pour la suggestion. J'ai considéré la mise à niveau vers CDI et l'annotation '@ Named ', mais j'ai rencontré beaucoup d'autres problèmes. Mais peut-être avez-vous raison et je devrais essayer de résoudre ces problèmes au lieu d'obtenir quelque chose à travailler qui sera bientôt obsolète. – scholt