6
votes

Struts2 Couper toutes les chaînes obtenues de formulaires

Je développe une application Web à l'aide de STRUTS2. Je veux améliorer la chaîne de formulaires. Pour ce besoin Coupez toutes les chaînes et si la chaîne obtenue est vide, définissez null sur champ.

Pour cela, j'ai créé stringconverter . xxx

Suivant, j'ai ajouté la ligne à Xwork-conversion.properties xxx

c'est tout. Mais je n'ai pas reçu le résultat souhaité.


ConvertToString (comptTostring () est appelé lorsque la formulaire de construction JSP, mais ConvertFromstring () n'invoque pas.

Ce que je fais mal ? Comment puis-je obtenir le même comportement en utilisant un autre moyen?

S'il vous plaît, ne proposez pas de solutions telles que:

  1. Retirez la valeur de ces éléments de formulaire à l'aide de JavaScript.
  2. Créer une méthode UTIL qui le fera en utilisant la réflexion. Puis appelez-le pour chaque bean de forme.

    merci d'avance, Alexey.


1 commentaires

La même chose me arrive.


4 Réponses :


1
votes

Je ne fais pas de Struts2, mais un problème similaire s'est manifesté dans JSF jusqu'à la version 1.2 en 2006 (JSF est le cadre MVC de Sun Sun, le concurrent de Struts2). Conversion de String était impossible dans JSF aussi "par conception". Les versions JSF plus anciennes utilisées pour vérifier si le type cible est égal à java.lang.string et il définit simplement la valeur de paramètre de demande dans le modèle sans tenter de la convertir (car la valeur de paramètre de demande est déjà obtenue comme étant chaîne ). Si le type de cible a été différent, il localisera et exécutez un convertisseur associé pour le convertir au type cible souhaité (autre que chaîne ). Depuis JSF 1.2, ils l'ont réparé en supprimant la vérification du type cible et en localisant le convertisseur de quelque manière que ce soit.

Je ne serai pas surpris si une fonction / bug similaire existe dans Struts2. Je regarderais autour de leur page d'accueil s'il n'y a pas déjà de problème / rapport de bogue à ce sujet et de poster une autre.


0 commentaires

3
votes

me semble juste. Êtes-vous sûr que ConvertFromstring n'est même pas appelé?

Une autre approche que vous pourriez essayer est d'écrire un intercepteur qui élimine tous les paramètres (on le souhaite souvent).


0 commentaires

5
votes

Vous trouverez la réponse dans le code de la classe Stroustypeconverter. Fondamentalement, à ce niveau, le cadre de la convertisseur de type pas ne savait rien de savoir si les données se font "de" ou "à" l'utilisateur, elle le sait simplement qu'elle convertit d'un type (chaîne) à un autre type (aussi string). Et comme il vérifie d'abord le type "à", il sera toujours appelttostring.

Pour couper une longue histoire courte, la version actuelle des Struts (2.1.x est ce que j'utilise) ne peut pas et ne peut pas prendre en charge les convertisseurs de type chaîne à chaîne . Depuis qu'ils sont, après tout, type convertisseurs, vous pouvez probablement dire que c'est par conception.

Je cherche également un moyen d'obtenir un résultat similaire, mais je n'ai pas encore trouvé de très bonne solution. L'approche la plus "correcte" serait probablement d'écrire un intercepteur (comme @leonbloy mentionné). Il y aurait plusieurs moyens d'aborder cela, l'être le plus simple de réduire tous les paramètres de la demande avant qu'ils ne soient définis sur l'action (c'est-à-dire avant l'intercepteur «paramètres» exécute).


0 commentaires