Passer la valeur de l'Objet en Primefaces SelectOneMenu
Bonjour, je suis à l'Aide de PrimeFaces 4.0 et j'ai besoin de passer la valeur de l'objet en SelectOneMenu.
Je suis à l'aide de convertisseur pour convertir de format de chaîne de caractères à la Classe le format de l'objet.
Ce sont les fichiers de code merci de m'aider...
lablevalue.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<h:body>
<h:form id="myform">
<p:growl showDetail="true"></p:growl>
<p:selectOneMenu value="#{itemlableAcction.idCard}" >
<f:converter converterId="converter.SelectMenUConverter" />
<f:selectItem itemLabel="Select" itemValue="" />
<f:selectItems value="#{itemlableAcction.idCards}" var="idv" itemLabel="#{idv.name}" itemValue="#{idv}" />
</p:selectOneMenu>
<h:commandButton action="#{itemlableAcction.onclickSubmit}" value="Submit"></h:commandButton>
</h:form>
</h:body>
</html>
ItemlableAcction
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import bo.IdCard;
@ManagedBean
public class ItemlableAcction {
List<IdCard> idCards = new ArrayList<IdCard>();
IdCard idCard;
public Object getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
public List<IdCard> getIdCards() {
return idCards;
}
public void setIdCards(List<IdCard> idCards) {
this.idCards = idCards;
}
public ItemlableAcction() {
IdCard card1 = new IdCard();
card1.setId(1);
card1.setName("ABC");
card1.setAddress("USA");
idCards.add(card1);
IdCard card2 = new IdCard();
card2.setId(2);
card2.setName("MNO");
card2.setAddress("INDIA");
idCards.add(card2);
IdCard card3 = new IdCard();
card3.setId(3);
card3.setName("XYZ");
card3.setAddress("Chaina");
idCards.add(card3);
}
public String onclickSubmit() {
IdCard ic = (IdCard) idCard;
System.out.println("In action id values are " + ic.getId() + " " + ic.getAddress());
return "";
}
}
SelectMenUConverter
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import bo.IdCard;
@FacesConverter("converter.SelectMenUConverter")
public class SelectMenUConverter implements Converter {
public SelectMenUConverter() {
System.out.println("Inside converter");
}
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
System.out.println("One" + arg2);
IdCard idCard = new IdCard(arg2);
return idCard;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
System.out.println("Two" + value);
return value.toString();
}
}
Carte d'identité
public class IdCard {
String name;
int id;
String address;
public IdCard() {
}
public IdCard(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- s'il vous plaît changer cette
xmlns:c="http://java.sun.com/jsf/core"
àxmlns:f="http://java.sun.com/jsf/core"
il rend mes yeux saignent. - Les messages d'erreur qui pourrait nous donner quelques indices?
- Est-il une raison pour la Objet public getIdCard ne pas public carte d'identité getIdCard?
- avez-vous jamais comprendre cela?
Vous devez vous connecter pour publier un commentaire.
Imaginez que vous avez à mettre en œuvre convertisseur pour 100 classes.
Si vous ne voulez pas mettre en œuvre un Convertisseur et d'obtenir les données de sortie de la liste, utilisez:
SelectItems Convertisseur Omnifaces
Vous avez un exemple complet.
PD: N'oubliez pas de mettre en œuvre toString avec un id unique.(Voir la documentation)
Vous n'êtes pas à la recherche et l'obtention de la nécessaire instance défini à partir de la liste (dans votre managed-bean) lors de l'obtention de son identifiant par
getAsObject()
s'méthode. Vous êtes juste instanciating un nouvel objet par le convertisseur. Essayez ceci: