Question

J'ai un formulaire avec (pour le moment) deux champs et je soumets ce qui suit:

capture.id = 213
capture.description = DescriptionText

L'objet cible 'capture' est immuable et je voudrais fournir un convertisseur de type pour prendre les deux valeurs et appeler le constructeur. Ce que je ne peux apparemment pas faire, c’est que TypeConverter soit invoqué.

Si l'entrée est simplement:

capture = foo

Ensuite, le convertisseur de type est appelé, mais cela n’a évidemment aucune utilité. Y a-t-il moyen de demander à un ognl de déléguer le reste du type de conversation, éventuellement en passant une mappe des paramètres?

Des idées? Est-ce même possible dans struts2

versions: struts 2.0.14 & amp; ognl 2.6.11

EDIT: J'ai lu un peu sur ce sujet et ma prochaine tentative m'a semblé être un bon plan. Ma théorie était que l'utilisation de la syntaxe Map obligerait Ognl à convertir les valeurs en carte, puis à appeler mon convertisseur avec cette carte pour la convertir en ma valeur.

capture[id] = 213
capture[description] = DescriptionText

Nope, cela ne semble pas faire la différence.

Était-ce utile?

La solution 2

Il semble que la réponse soit non , vous ne pouvez pas le faire avec struts2.

J'ai posté cette question sur la liste de diffusion struts2 et il semble qu'il ne soit tout simplement pas possible de présenter plusieurs champs à un TypeConverter .

La solution alternative suggérée consiste à avoir un objet modifiable avec des setters, puis une méthode de "pétification" pour empêcher toute modification future.

Pour mon projet, j'ai en fait implémenté un autre intercepteur struts pour implémenter mon comportement de liaison de paramètre personnalisé.

Autres conseils

La façon dont j'ai fait cela était d'avoir les éléments suivants dans le JSP:

<s:textfield name="capture" value="capture.id" />
<s:textfield name="capture" value="capture.description" />

Dans le convertisseur de type, le paramètre de valeurs String [] de la méthode convertFromString contiendra les deux valeurs nécessaires à la construction d'une nouvelle capture immuable. Si vous êtes cohérent avec l'ordre des champs de texte (ou mieux encore, encapsulez-le dans un fichier de balises), vous pouvez utiliser les index du tableau de valeurs pour obtenir de manière fiable le champ approprié de l'objet de capture.

Ce qui est bizarre dans cette approche, c'est que la méthode convertToString ne fait vraiment rien pour vous. Vous pouvez renvoyer id ou description (ou les concaténer ensemble), mais comme vous utilisez l'attribut values ??dans le fichier JSP, cela n'a pas d'importance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top