Comment référencer JSF géré les fèves, qui sont fournis dans un fichier JAR?
J'ai un fichier WAR avec la structure suivante:
La JSF managed bean BusinessObjectTypeListController
est situé dans commons-web-1.0.jar
dans /WEB-INF/lib
et référencé dans BusinessObjectTypeListView.xhtml
. Quand je lance mon application web et j'appelle ce point de vue, j'obtiens l'erreur suivante:
javax.servlet.ServletException: /view/common/businessObjectTypeListView.xhtml @34,94 écouteur="#{businessObjectTypeListController.selectData}": la Cible Inaccessible, l'identificateur 'businessObjectTypeListController' résolu à null
Pourquoi n'est-ce pas la classe du contrôleur trouvé? Il doit être dans le classpath, est-il?
Comment êtes-vous l'exécution de l'application? Avez-vous tout simplement choisir "Exécuter sur le Serveur" à partir d'Eclipse? Ou êtes-vous du déploiement d'un conteneur manuellement? Et lequel le contenant est-ce?
Je le déployer à l'aide de ant dans Glassfish.
Je le déployer à l'aide de ant dans Glassfish.
OriginalL'auteur Francesco | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'avoir un JSF 2.0
/META-INF/faces-config.xml
fichier dans lecommons-web-1.0.jar
fichier afin d'obtenir JSF pour analyser le fichier JAR pour les classes avec JSF annotations comme@ManagedBean
et auto-enregistrer.JSF n'a pas à savoir la numérisation de chaque classe de chaque fichier JAR dans le classpath, qui aurait été trop coûteux. Seuls les Pots avec le ci-dessus
/META-INF/faces-config.xml
fichier va être analysé.Vous devez également vous assurer que vous ne pas ont la
metadata-complete="true"
attribut dans la<faces-config>
déclaration de webapp propre/WEB-INF/faces-config.xml
fichier, sinon JSF va supposer que cela visages config est complète et ne sera donc pas auto-scan des fichiers JAR pour les annotations.Si aucune de ces deux conditions sont (ou peuvent être) se sont réunis, alors vous devez enregistrer manuellement le bean
<managed-bean>
dans webapp propre/WEB-INF/faces-config.xml
au lieu de s'appuyer sur les annotations.Voir également le chapitre 11.4.2 de JSF 2.0 (l'emphase est mienne).
OriginalL'auteur
J'ai le même problème avec le CDI haricots dans mon cas.
J'ai common.jar projet où j'ai placé le CDI haricots. (sans beans.xml)
et
J'ai webapp.la guerre qui contient common.jar dans lib et beans.xml.
quand je l'appelle un cdi haricot de la jsf, - je l'obtenir n'est pas accessible exception:/
structure de projet est créé à l'aide de maven :
- maven-archetype-quickstart pour common.jar
- maven-archetype-webapp pour la webapp.la guerre
Je suis à l'aide d'eclipse/juno fr déployer pour Glassfish 3.1.x.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Résolu:
Pour EJB et un POT de l'emballage vous devez placer les beans.xml dans src/main/resources/META-INF/.
Pour la GUERRE de l'emballage vous devez placer les beans.xml dans src/main/webapp/WEB-INF/.
Rappelez-vous que seulement .java, les fichiers doivent être placés dans le répertoire src/main/java et src/test/java répertoires. Des ressources comme .xml les fichiers doivent être dans le répertoire src/main/resources.
de sujet:
CDI: beans.xml où dois-je mettre vous?
OriginalL'auteur
À mon avis la classe BusinessObjectTypeListController est fondée correctement mais n'est pas instancié.
Comment vous créer une instance de la classe sur une de vue? Si vous utilisez un BeanFactory examen de la configuration des fichiers xml
OriginalL'auteur