2016-06-14 2 views
1

Le haricot est défini pour être aussi simple comme suit:La classe extension ClientBehaviorBase peut-elle être considérée comme une cible d'injection?

@Named 
@RequestScoped 
public class ConfirmBean { 

    private String confirmMsg; 

    public ConfirmBean(){ 
     confirmMsg = "Are you sure you want to delete this file ?"; 
    } 

    // getters & setters   
} 

Et la classe héritant de la ClientBehaviorBase

@FacesBehavior(value = "confirm") 
public class ConfirmDeleteBehavior extends ClientBehaviorBase { 

    @Inject 
    ConfirmBean confirmBean; 
    //@Inject 
    //ConfirmEJBBean confirmEJBBean; 
    //@EJB 
    //ConfirmEJBBean confirmEJBBean; 

    @Override 
    public String getScript(ClientBehaviorContext behaviorContext) { 
     return "return confirm('"+confirmBean.getConfirmMsg()+"');"; 
    } 
} 

avec le taglib Fichier-

<namespace>http://www.custom.tags/jsf/delete</namespace> 
    <tag> 
     <tag-name>confirmDelete</tag-name> 
     <behavior> 
      <behavior-id>confirm</behavior-id> 
     </behavior> 
    </tag> 

avec une entrée en context-param en web.xml -

<context-param> 
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
    <param-value>/WEB-INF/taglib/delete.taglib.xml</param-value> 
</context-param> 

et l'accès à cette balise personnalisée à l'avant Couche-

 <h:form> 
      <h:commandButton value="Delete" action="done"> 
       <b:confirmDelete/> 
      </h:commandButton> 
     </h:form> 

J'utilise le serveur d'applications Glassfish4.1.1 avec Mojarra 2.2.12 la version utilisée en interne.

J'ai obtenu un NPE ici-

enter image description here

+0

Votre marquage BTW suggère type de celui-ci fonctionne en MyFaces (en raison de l'étiquette Mojarra ajoutée) et par exemple dans JBoss (en raison de l'étiquette GlassFish). Au moins c'est comme ça que je lis toujours les tags ... – Kukeltje

Répondre

2

Ce n'est pas tant que l'extension de la classe fait pas eligable pour l'injection, il est que la @FacesBehaviour est l'annotation ne permet pas une cible d'injection. Un peu de googling m'a dit ceci: In JSF 2.2 it is not a target for injection, in 2.3 it is.

OmniFaces a ajouté un support pour l'injection en FacesConverter s et FacesValidator s pour être utilisé avec jsf 2.2 mais pas le comportement FacesBehaviour.

Voir aussi: