JSF 2 <f:selectItems> ne pas reconnaître itemLabel et itemValue attributs
J'ai l'déroulant dans un Facelets page:
<h:selectOneMenu value="#{contactBean.selectedContact}" converter="#{contactConverter}">
<f:selectItems value="#{contactsHolder.contacts}" var="contact"
itemLabel="#{contact.firstName}" itemValue="#{contact}" />
</h:selectOneMenu>
Le problème est que, peu importe ce que j'ai mis pour itemLabel
(JSF expression EL ou juste du texte brut), il ne s'affiche pas. Toute idée de ce que je fais mal?
Voici ContactConverter
:
@ManagedBean(name = "contactConverter")
@RequestScoped
public class ContactConverter implements Converter, Serializable {
@ManagedProperty(value = "#{contactsHolder}")
private ContactsHolder contactsHolder;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return contactsHolder.getContacts().get(value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ((Contact) value).getContactID();
}
//getter & setters...
}
Et ContactsHolder
:
@ManagedBean
@SessionScoped
public class ContactsHolder implements Serializable {
private Map<String, Contact> contacts;
@PostConstruct
public void init() {
contacts = new LinkedHashMap<String, Contact>();
//get Contacts data and populate map...
}
//getters & setters...
}
À l'aide de texte brut convient cependant de travail.
OriginalL'auteur holic87 | 2011-10-03
Vous devez vous connecter pour publier un commentaire.
Vous donnez le biberon à un
Map<String, Contact>
à<f:selectItems value>
. Chaque élément dansvar
attribut sera unCarte.Entrée<String, Contact>
qui a seulementgetKey()
etgetValue()
les méthodes retournant leString
carte clé etContact
valeur de la carte, respectivement. LeMap.Entry
classe, en effet, ne dispose pas d'ungetFirstName()
méthode.Le fixer en conséquence:
Ou, si vous ciblez un Servlet 3.0 /EL 2.2 capable conteneur qui permet d'invoquer la non-méthodes de lecture, de sorte que vous pouvez utiliser
Carte#valeurs()
pour obtenir unCollection<Contact>
:Ou, faire la
#{contactsHolder.contacts}
unList<Contact>
au lieu de cela, de sorte que votre code fonctionne:OriginalL'auteur BalusC