2009-03-21 7 views
1

Je développe un composant personnalisé en utilisant JSF 1.2. Ma classe de balises étend UIComponentELTag et a des variables de type de données ValueExpression. Les valeurs de ceux-ci sont définies à partir des attributs correspondants de la balise. (Utilisation de la fonction setProperties) Exemple,JSF 1.2 Composant personnalisé - Contenu du corps de Backing Bean

<sr:show name="#{backingBean.name}" ...> #{backingBean.mainContent}</sr:show> 

Je suis coincé lorsque je tente d'obtenir le bodyContent de l'étiquette comme une valeur de liaison. Ce est jusqu'où j'ai procédé: Ceci est le code dans doAfterBody()

public int doAfterBody() throws JspException{ 
if(bodyContent!=null) { 
String body = bodyContent.getString(); 
FacesContext context = FacesContext.getCurrentInstance(); 
UIComponent component = super.findComponent(context); 
MyComp myComp= (MyComp) component; 
myComp.setMain(body); 

} 
bodyContent.clearBody(); 
return SKIP_BODY; 
}

Si le corps de l'étiquette ne contient pas de valeur contraignante, ce code fonctionne très bien. Je veux vérifier si le corps a une valeur de liaison et ensuite définir la valeur du bean. Dans JSF 1.1, j'ai vérifié cela en utilisant isValueReference (body). Comment puis-je y parvenir dans JSF 1.2?

Je n'ai trouvé aucun exemple d'obtention du contenu du corps en tant que valeur de liaison nulle part. Sil te plait aide moi.

Merci.

Répondre

0

Pourquoi ne pas simplement ajouter une autre variable, par ex. "contenu" et lier cela au corps du texte que vous voulez rendre?

<sr:show name="#{backingBean.name}" text="#{backingBean.mainContent}" /> 

Ou simplement:

<sr:show bean="#{backingBean} /> 

et rendre l'ensemble du lot.

+1

Si l'utilisateur veut fournir la valeur directement sans un bean, est-il conseillé de mettre beaucoup de contenu dans l'attribut tag (comme, text = mainContent, où mainContent peut contenir du contenu énorme ou xml ou quoi que ce soit d'autre La balise personnalisée doit prendre en charge à la fois la valeur de liaison et la valeur directe. –

+0

Je suis en train d'apprendre ce genre de choses moi-même - désolé. En fonction de la logique que vous avez par rapport à la mise en forme, vous pouvez simplement utiliser des composants de composition de facelets pour cela. En outre, vous pouvez séparer la logique de présentation en une seule balise et lui faire définir une variable avec le résultat, puis utiliser d'autres éléments pour le formatage. –

+0

J'autorise la saisie du contenu principal dans le corps de la balise. Et je fournis également un texte d'attribut qui peut prendre une ValueExpression. De cette façon, l'utilisateur peut entrer du texte codé en dur dans le corps de la balise ou il peut fournir la valeur de l'attribut texte du bean backing. Je me suis installé avec cette solution. J'espère que d'autres trouveront cette information utile. –

Questions connexes