primefaces de saisie semi-automatique avec pojo
J'ai lu sur de SORTE que certains QA sur le même composant, mais je sens que je suis absent quelque chose, parce que je suis un pas en arrière.
Je ne peux même pas faire de la page ouverte lors de l'utilisation de la primefaces de saisie semi-automatique de composant en elle.
L'extrait de code pour qu'il est:
<p:autoComplete value="#{indirizzoCtrl.selectedCodiceNazione}"
completeMethod="#{indirizzoCtrl.completeNazione}"
var="nazione" itemLabel="#{nazione.nome}"
itemValue="#{nazione.codiceNazione}" />
Nazione est une classe Pojo où CodiceNazione
et Nome are
deux Chaîne de caractères (avec getter et setter pour être sûr). completeNazione
est une méthode sur la ManagedBean qui renvoie List<Nazione>
.
En regardant BalusC explication ici, il me semble que je n'ai pas besoin de convertisseur, parce que les deux itemValue et de la valeur de mappage des attributs de propriété de type chaîne.
De toute façon, quand je viens d'ouvrir la page contenant cette extrait de la saisie semi-automatique, il se bloque avec ce message d'erreur:
javax.el.PropertyNotFoundException: /Cliente/Indirizzo.xhtml @23,56 itemValue="#{nazione.codiceNazione}": itemValue="#{nazione.codiceNazione}": Property 'codiceNazione' not found on type java.lang.String
Pourquoi ce qui se passe? Je ne peux vraiment pas le faire. La méthode completeNazione n'a même pas appelé encore, donc il ne devrait pas savoir tout Nazione
encore.
Quel est le problème avec elle?
Édité:
À la suite de la suggestion, j'ai essayé d'ajouter un convertisseur, mais j'obtiens toujours la même erreur.
Voici mon convertisseur:
public class NazioneConverter implements Converter {
final static Logger log = Logger.getLogger(NazioneConverter.class);
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value.trim().equals("")) {
return null;
} else {
try {
IndirizzoRepository ir = new IndirizzoRepository();
List<Nazione> nazioni = ir.getNazioneByName(value);
if (nazioni.size()==1) return nazioni.get(0);
else throw new Exception();
} catch (Exception e) {
String msg = "Errore di conversione";
log.error(msg, e);
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, "Non è una nazione conosciuta"));
}
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null || value.equals("")) {
return "";
} else {
return String.valueOf(((Nazione) value).getNome());
}
}
}
maintenant le composant dans la vue ressemble:
<p:autoComplete value="#{indirizzoCtrl.indirizzo.nazione.codiceNazione}"
completeMethod="#{indirizzoCtrl.completeNazione}"
var="nazione" itemLabel="#{nazione.nome}" converter="#{nazioneConverter}"
itemValue="#{nazione.codiceNazione}" forceSelection="true" />
Mais n'ont toujours pas de travail. Le convertisseur n'est même pas invoqué: je l'ai enregistré dans mon faces-config.xml fichier.
J'ai aussi essayé itemValue="#{nazione}", comme dans le primefaces vitrine, mais le problème est devenu la ItemLabel
attribut, associé à nazione.nome
.
Ce que je fais mal?
la version 2.2, et tout le reste fonctionne parfaitement
Quel est le message d'erreur après l'ajout du convertisseur?
exactement le même. Si j'écris
itemValue="#{nazione.codiceNazione}"
puis le message d'erreur est exactement le même. Si je l'ai changer pour itemValue="#{nazione}"
alors exactement la même erreur, mais en référence à itemLabel="#{nazione.nome}"
. En pratique, il est impossible d'extraire la propriété de nazione
objet.Personne n'a pensé à cette question? J'ai exactement le même problème. J'ai étudié la question et je ne pense pas que nous avons besoin d'un convertisseur, puisque la valeur du champ de saisie semi-automatique est une Chaîne de caractères, pas Pojo. J'apprécierais vraiment une réponse!
OriginalL'auteur themarcuz | 2011-12-19
Vous devez vous connecter pour publier un commentaire.
Cela a fonctionné pour moi:
OriginalL'auteur Fabrizzio
Avez-vous lu le guide de l'utilisateur? http://www.primefaces.org/documentation.html
Je dois dire que je n'ai jamais utilisé la saisie semi-automatique avec pojo, mais de ce que j'ai lu dans le guide de l'utilisateur, Çağatay Çivici il dit:
Ici vous pouvez trouver un convertisseur (
PlayerConverter
) est mis en œuvre, même siplayer.name
et les autres accessoires sont des Chaînes de caractères.J'avoue que c'est intéressant et je vais faire des recherches mais je n'ai pas le temps en ce moment...
ajouter un convertisseur simple et de voir par vous-même...Vous ne pouvez pas apprendre à programmer sans pratique!
pour sûr que je vais le faire... je suis juste occupé à une autre tâche pour l'instant, mais dans quelques heures je vais essayer d'obtenir qu'il fonctionne comme l'a suggéré
Bon pour vous! Laissez-moi savoir les résultats. Je vais même essayer moi-même, mais peut-être que demain...
Ajout de nouvelles infos... j'ai essayé avec le convertisseur, mais rien ne change 🙁
OriginalL'auteur spauny
Changement
converter="#{nazioneConverter}"
àconverter="nazioneConverter"
dansautocomplete
OriginalL'auteur Marlon
Changer le
itemValue
deitemValue="#{nazione.codiceNazione}"
àitemValue="#{nazione}"
la saisie semi-automatique.OriginalL'auteur Mustafa