2009-08-14 14 views
0

Je suis aux prises avec un problème d'internationalisation dans l'une de mes applications. L'histoire se présente comme suit:Accéder à JSF SelectItem.Label et Value à partir de XHTML sans selectOneMenu

J'ai une datatable qui affiche les enregistrements, et un selectOneMenu dans l'ordre pour sélectionner une colonne de la table de données à filtrer. Le selectOne est alimenté avec SelectItems qui sont remplis en fonction des paramètres régionaux réels dans le bean backing à l'heure DataRefresh. Désormais, lorsque l'utilisateur modifie les paramètres régionaux, le contenu de selectOne reste dans l'ancien environnement local jusqu'à ce que la page soit rediffusée. C'est assez logique et attendu.

Bien sûr, je veux que cela change.

J'ai donc essayé d'écrire un selectOne qui utilise selectItems qui contiennent des références aux entrées languageFile afin de pouvoir les changer sans redendering.

Voici ce que j'ai essayé

<select id="j_id5:filterSelector" name="j_id5:filterSelector" size="1"> 
    <c:forEach var="item" items="#{gridBean.filterFields}"> 
     <option value="#{item.Value}">#{msg[item.Label]}</option> 
    </c:forEach> 
</select> 

Malheureusement JSF me dit l'article n'a pas de propriété label ou valeur qui je crois à peine. ;)

Est-ce que quelqu'un a une idée de comment accéder à ces propriétés de cette façon?

Répondre

0

J'ai résolu le problème en stockant deux fois les champs de filtre. Une fois pour chaque langue - la décision d'exécution qui est rendue. Pas gentil, mais ça marche. Impossible de faire fonctionner le changementListener ...

1

Il me semble que vous devriez écrire:

#{item.value} 

au lieu de #{item.Value}, comme convention JavaBeans standard est d'avoir getXyz() getter pour xyz propriété.

De même, pourquoi ne fournissez-vous pas un valueChangeListener au composant de l'interface utilisateur pour la sélection des paramètres régionaux, puis, à l'intérieur de celui-ci, remplissez les étiquettes des éléments sélectionnés pour ces paramètres régionaux. De cette façon, vous pouvez utiliser la balise standard f:selectItems.

+0

thx pour la réponse, je peux accéder aux propriétés maintenant. Mon d'oh. Je suis d'accord qu'un valueChangeListener serait le meilleur moyen d'aller . Je ne suis pas sûr de savoir comment l'intégrer dans mon application. Acually j'ai un LanguageSelectioBean qui affiche deux drapeaux qui changent les paramètres régionaux sur clic, via commandLinks. -> les liens de commande peuvent-ils déclencher un événement valueChange? Secondy mon datatable est un composant que j'utilise dans plusieurs emplacements dans mon application. Je ai besoin de l'étendre pour le faire écouter pour valueChanges et requery les fichiers de langue onValueChange, non? thx K – KB22

0

Vous pouvez également faire en sorte que vos liens de commande rendent de nouveau la page afin qu'elle fasse automatiquement ce dont vous avez besoin. Je ne sais pas si cela répond à vos exigences ou non. :)