2010-11-03 23 views
3

J'ai joué avec les composants composites JSF 2.0 mais je ne comprends pas très bien ce que l'attribut require de la balise composite:attribute doit faire. La documentation indique que l'attribut required est true si l'auteur de la page doit fournir une valeur pour cet attribut.L'attribut Composant Composant requis génère une exception dans Mojarra 2.0.3

J'ai interprété cela comme signifiant qu'une valeur doit être fournie pour tous les attributs composites: required=true. J'ai également supposé qu'une chaîne vide est une valeur valide. Et voici comment cela a fonctionné dans Mojarra 2.0.2.

En utilisant ce simple bean géré:

@ManagedBean(name = "simpleMB") 
@ViewScoped 
public class SimpleManagedBean implements Serializable { 

    private static final long serialVersionUID = -1; 

    private String whatever; 

    ... setter and getter 
} 

Et la pièce composite:

<composite:interface> 
    <composite:attribute name="value" required="true" /> 
</composite:interface> 

<composite:implementation> 
    <h:outputText value="Value: '#{cc.attrs.value}'" />  
</composite:implementation> 

Ces balises ont travaillé dans Mojarra 2.0.2:

<foo:bar value="" /> 
<foo:bar value="#{simpleMB.whatever}" /> 

Cependant, quand je mis à jour à 2.0.3, seule la première étiquette fonctionne. La deuxième balise provoque ce message d'erreur:

/requiredAttribute.xhtml @20,42 <foo:bar> The following attribute(s) are 
required, but no values have been supplied for them: value. 

Cela fonctionne correctement lorsque j'ai défini la valeur false.

Ai-je mal interprété ce que l'attribut requis signifie? Quelqu'un peut-il clarifier quel comportement je devrais attendre?

Merci.

+0

Salut, je viens de tomber sur ce même problème. Apparaît avec Mojarra 2.0.3. Se sent comme un bug? –

Répondre

0

Je ne sais pas si c'est un bug, mais c'est la nature des el-expressions. Le type d'expression par défaut est String et la chaîne vide traduite par null.

+0

Ceci est différent. Malgré ce que vous essayez de transmettre à cet attribut, Mojarra 2.0.3 génère toujours une erreur ... –

2

Nous avons des problèmes simulaires avec required = "true" en combinaison avec le bean @ViewScoped.

Dans notre cas, le bean ne se comporte plus comme un bean @ViewScoped (nouvel appel de constructeur à chaque fois).

Votre problème pourrait être que, parce que le haricot perd de sa portée, les variables sont à nouveau nulles? Dans les deux cas, la seule ressource que je puisse vous fournir est de ne pas utiliser required = "true" ou d'utiliser un bean @SessionScoped.

(Peut-être cela se rapporte au problème de Mojarra ne pas être en mesure de gérer les liaisons aux propriétés dans les haricots @ViewScoped)

0

Cela semble avoir été this issue, qui semble avoir été fermé il y a un certain temps, bien que je ne peux pas semble trouver dans quelle version il a été inclus.