2017-08-14 4 views
3

Demandez aux extraits de code suivant:faces-config.xml Changement de 2,2 à 2,3 javax.el.PropertyNotFoundException des causes: Cible Inaccessible, identifiant 'haricot' résolu null

Bean:

import javax.faces.view.ViewScoped; 
import javax.inject.Named; 

@Named(value = "directoryBean") 
@ViewScoped 
public class DirectoryBean implements Serializable { 

private static final long serialVersionUID = 1L; 
    .... 
} 

visages -config.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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_3.xsd" 
    version="2.3"> 
    .... 
</faces-config> 

group.xhtml

<ui:composition ...> 

    <f:metadata> 
     <f:viewParam name="id" value="#{directoryBean.id}" /> 
    </f:metadata> 

</ui:composition> 

En résultat obtenir l'exception:

javax.el.PropertyNotFoundException: /group.xhtml @6,64 value="#{directoryBean.id}": Target Unreachable, identifier 'directoryBean' resolved to null 

Got it après avoir changé faces-config.xml du ver 2.2 à 2.3 ver la syntaxe.

Signification, avec des visages-config.xml avec le contenu suivant tout fonctionne très bien:

<faces-config version="2.2" 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"> 
.... 
</faces-config> 

JSF 2.3.2 déployé sur le serveur Payara 4.1.2.172 (Full), et a également ajouté à pom.xml avec portée "fournie".

.... 
<dependencies> 
    ... 
    <dependency> 
     <groupId>org.glassfish</groupId> 
     <artifactId>javax.faces</artifactId> 
     <version>2.3.2</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.faces</groupId> 
     <artifactId>javax.faces-api</artifactId> 
     <version>2.3</version> 
     <scope>provided</scope>    
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
    ... 
</dependencies> 
.... 

J'ai vérifié toutes les solutions que j'ai pu trouver pendant plusieurs heures, y compris la version différente de beans.xml:

  1. initialement beans.xml n'a pas été présent dans le projet - question persistent ;
  2. ajouté vide beans.xml - problème persistant;
  3. ajouté beans.xml avec deux options différentes de bean-discovery-mode - "all" et "annoté" - problème persistant;

Contenu du \ WEB-INF \ beans.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans 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/beans_1_1.xsd" 
     bean-discovery-mode="all"> 
</beans> 

sur les instances locales Testée de Payara 4.1.2.172, GlassFish 5 (java ver 1.8.0_144) et l'instance à distance de Payara 4.1 .2.172 (java ver 1.8.0_131).

Merci!

Remarque: Des exemples de projets comme celui-ci https://github.com/AnghelLeonard/JSF-2.3/tree/master/JSF23InjectInConverterValidator donnent la même erreur.

+0

Avez-vous simplement changé le visages-config? Ce qui veut dire que vous étiez déjà sur une version JSF 2.3.2 et que vous venez de changer la face-config? – Kukeltje

+1

Oui, exactement! Le retour de faces-config à la syntaxe JSF 2.2 résout le problème. –

+0

Une petite recherche google rapide a abouti à ceci: https://stackoverflow.com/questions/44064995/jsf-2-3-not-finding-my-named-cdi-1-2-managed-bean. Utilisez-vous une librairie JSF 'externe' aussi? Un fourni dans votre webapp? – Kukeltje

Répondre

1

Je voudrais poster une solution complète, ce qui devrait être fait pour que les librairies JSF 2.3 fonctionnent en mode JSF v2.3. Les exemples de code ci-dessous sont basés sur l'environnement du serveur GlassFish 5.0.

1) Mettre à niveau les bibliothèques JSF vers la version 2.3.3 au moins (cela corrige quelques bogues liés à jsf 2).3 Activation du mode)

2) Le beans.xml devrait ressembler à:

<?xml version="1.0" encoding="UTF-8"?> 
<beans 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/beans_2_0.xsd" 
    bean-discovery-mode="all" version="2.0"> 
</beans> 

3) faces-config.xml devrait ressembler à:

<?xml version='1.0' encoding='UTF-8'?> 
<faces-config version="2.3" 
      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_3.xsd"> 
    .... 
</faces-config> 

4) Et le joueur clé dans toute cette configuration - est classe Java spécialement formé qui active réellement le mode JSF 2.3, dans mon cas, il a le nom Jsf23Activator et le contenu absolument vide:

package ua.local.beans; 

import javax.enterprise.context.ApplicationScoped; 
import javax.faces.annotation.FacesConfig; 

@ApplicationScoped 
@FacesConfig(version = FacesConfig.Version.JSF_2_3) 
public class Jsf23Activator { 

} 

L'annotation @FacesConfig(version = FacesConfig.Version.JSF_2_3) est ajoutée une fois par projet, pas besoin de l'ajouter plusieurs fois. Fondamentalement, le besoin d'ajouter cette annotation a été mentionné plusieurs fois par d'autres, mais dans mon cas cela n'a pas fonctionné jusqu'à ce que j'ai déclaré cette classe comme bean CDI en ajoutant l'annotation @ApplicationScoped. Ce n'est qu'après avoir déclaré la classe comme bean CDI, j'ai effacé le projet/redémarré le serveur - le mode JSF 2.3 a finalement été activé et maintenant je peux injecter des classes JSF/utiliser d'autres fonctionnalités JSF 2.3!

Merci!

0

à DirectoryBean ajouter cette ligne:

// Activates CDI build-in beans 
@FacesConfig(
     version = JSF_2_3 
) 

et beans.xml changement en mode haricot découverte à "tous". faces-config.xml set version 2.3

+0

D'où avez-vous eu cette information? avez vous un lien? Je suis intéressé par plus de détails. Merci – Kukeltje

+0

Merci! @Kukeltje nous avons eu une discussion approfondie sur ce sujet ici: https://github.com/javaserverfaces/mojarra/issues/4264 –