JSF 2.0 paramètres d'affichage pour passer des objets
Je suis en train de passer un objet d'une page à une autre page où chaque page est dans un point de vue différent.
Sur la première page j'ai une entrée de texte, où myBean est un ViewScoped Haricot et le nom est un objet.
<h:inputText value="#{myBean.name}"/>
La deuxième page contient
<f:metadata>
<f:viewParam name="userId" value="#{myBean.name}"/>
</f:metadata>
Je reçois le message d'erreur Erreur de Conversion valeur de réglage de la mypackage.myBean@257100b "pour" null Converter".
Pouvons-nous nous passer des objets autres que des valeurs de Chaîne pour afficher les paramètres?
- Par le moyen d'avoir de la valeur dans un
<h:inputText>
sans convertisseur est assez déroutant. Vous auriez eu exactement le même problème lors de la soumission du formulaire POST à ce champ.
Vous devez vous connecter pour publier un commentaire.
Oui, vous le pouvez. Vous avez juste à fournir un convertisseur qui convertit entre la chaîne de la représentation de l'objet de type derrière
#{myBean.name}
et l'objet réel. La représentation de chaîne est généralement la technique unique/naturel identificateur de l'objet en question. Par exemple, la table du PK. Il a obtenu d'être une chaîne de caractères, tout simplement parce que la requête HTTP paramètres peuvent être des chaînes de caractères seulement. Vous ne pouvez pas passer complexe des objets Java autour de dans les Url. Les url sont simplement des chaînes de caractères.Voici un coup d'envoi exemple:
E. g. le suivant dans la vue initiale:
(qui génère un
<a href="edit.xhtml?id=123">Edit</a>
)et le suivant dans la vue:
avec ce convertisseur
(simpliste; tous les null/nombre de vérifications omis, mais vous avez l'idée)
Voir aussi:
Mise à jour que par les commentaires, que vous voulez réellement le feu à une requête POST. Vous n'avez pas besoin d'un
<f:viewParam>
à tous. C'est pour le réglage/la validation et la conversion d'OBTENIR les paramètres de la demande seulement. En tentant de sérialiser l'objet entier est ça aussi, sans prononcer sens. Utilisez simplement@ManagedProperty
.E. g.
C'est seulement pour ne pas bookmarkable plus et pas SEO-friendly (mais c'est la nature du POSTE, vous êtes probablement déjà depuis longtemps conscients de cela). Notez que le
#{personViewer}
bean doit lui-même être@ViewScoped
(et donc pas@ReqestScoped
). Vous devez également vous assurer de ne pas revenir avec une redirection, mais seulement à l'avant.@ManagedProperty
. Voir aussi le "Voir aussi" lien de l'article au bas de la réponse.<f:viewParam>
à tous. La sérialisation permet absolument pas de sens. Le<f:viewParam>
pour le réglage OBTENIR les paramètres de la demande. Pour le POST, il suffit d'utiliser@ManagedProperty
dans laquelle vous faites référence à la première bean. Voir aussi la mise à jour de réponse.