2012-10-17 2 views
1

J'aimerais savoir s'il est possible d'adapter le ExtendedBeanELResolver de la question nesting-jsf-expression-strings et de gérer cette expression EL imbriquées:Essayer de chaînes d'expression nid JSF

#{controllerBean.getBean('userProfileBean', component).street}* 

controllerBean.getBean renvoie le bean userProfileBean. Je vais avec le ExtenedBeanELResolver exception suivante:

SCHWERWIEGEND: javax.el.PropertyNotFoundException: /WEB-INF/templates/modification/userProfile.xhtml @35,196 value="#{controllerBean.getBean('userProfileBean', component).street}": Property 'getBean' not found on type com.something.ControllerBean 

Si j'insère des crochets supplémentaires, il fonctionne, mais semble encore plus laid que maintenant:

#{(controllerBean.getBean('userProfileBean', component)).street}* 

Est-il possible de le faire sans plus supports?

UPDATE 1 après la réponse de CycDemo:

problème étrange. Si je mets le

<h:inputText value="#{beanOne.getBean('data').title}" /> 

intérieur une forme rend la page, mais seulement jusqu'à ce que je soumettez le formulaire. Après cela, la même erreur sera affichée.

WARNUNG: /WEB-INF/templates/home.xhtml @61,66 value="#{beanOne.getBean('data').title}": Property 'getBean' not found on type com.something.BeanOne 

Si je change à

<p:inputText value="#{beanOne.getBean('data').title}" /> 

la page ne sera même pas rendu au début. Je pense que le problème est que le JSF essaie d'appeler le setter lorsque le formulaire est soumis mais ne peut pas l'évaluer correctement.

Des idées?

MISE À JOUR 2

appearently JSF tente d'appeler getGetBean() parce qu'il est à la recherche d'une propriété sur BeanOne (j'ai eu un point de jonction dans Eclipse) qui est faux:

@ManagedBean 
@ViewScoped 
public class BeanOne { 

    private Object bean = new String("something"); 

    public Object getBean(String name) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    return context.getApplication().evaluateExpressionGet(context, 
     "#{" + name + "}", 
     Object.class); 
    } 

    public Object getGetBean() { 
    return bean; // <-- will be called by JSF 
    } 

    public void setGetBean(Object bean) { 
    this.bean = bean; 
    } 

} 
+0

qui erreur que vous obtenez à nouveau? soumettez votre cause; – CycDemo

Répondre

1

Assurez-vous

#{(controllerBean.getBean('userProfileBean', component)).street} 
    change to 
    #{controllerBean.getBean('userProfileBean', component).street} 

Il fonctionne dans JSF 2.0 lorsque je teste.

Utilisez jboss-el. Télécharger le fichier jar here

BeanOne.java importer javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped;

@ManagedBean(name="BeanOne") 
@RequestScoped 
public class BeanOne { 
    private Data data; 

    public Data getBean(String title) { 
     data = new Data(title); 
     return data; 
    } 
    public void show() { 
     System.out.println("User Input ==>" + data.getInput()); 
    } 
} 

Date.java

public class Data { 
    private String title; 
    private String input; 

    public Data(String title) { 
     this.title = title; 
    } 

    public String getInput() { 
     return input; 
    } 

    public void setInput(String input) { 
     this.input = input; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

pageOne.xtml

<h:form> 
    <h:inputText value="#{BeanOne.getBean('Test').input}"/><br/> 
    <h:commandButton value="Show" action="#{BeanOne.show}"/> 
</h:form> 

ajouter la configuration suivante dans web.xml

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

J'ai mis à jour la question. – Manuel

+0

@Manuel, S'il vous plaît, vérifiez ma réponse que j'ai mis à jour pour votre nouvelle question, encore une fois. – CycDemo

+0

Essayez de faire de votre classe * Data * un bean géré, et récupérez-le comme je l'ai fait avec votre * BeanOne *. Vous devriez avoir la même erreur que moi. – Manuel