2017-06-06 2 views
-1

J'essaie de passer la valeur de la page JSP à ma classe Action en appuyant sur le bouton Mise à jour.Le formulaire de mise à jour avec struts2 ne fonctionne pas

Dans ce cas, je crée dans la classe d'action une liste de chaînes nommées value avec getter et setter.

Mon problème est que, lorsque vous essayez de modifier le champ d'entrée en JSP puis en appuyant sur Mise à jour, value reste le même (avec sa valeur initiale) dans la classe d'action.

Par exemple:

v[0] = "zero" 
v[1] = "something" 
v[2] = "true" 

Dans ma forme, j'ai changé le texte d'entrée v[2] dans "false" puis pressée Mise à jour; lorsqu'il est imprimé en execute(), v[2] reste "true".

MISE À JOUR: Je récrire le code jsp, en utilisant tag struts2 au lieu de scriptlet

<form name="propertiesForm" method="post" action="<s:url value='/update.action'/>" > 
     <table> 
       <tr> 
      <th>Property</th> 
      <th>Value</th> 
       </tr> 
      <s:iterator value="%{propertiesForm.properties}" status="rowStatus"> 
     <tr> 
     <td><s:property value="%{properties[#rowStatus.index].name}"/></td> 
     <td><s:textfield name="value[%{#rowStatus.index}]" value="%{propertiesForm.getValue(#rowStatus.index)}"/></td> 
     </tr> 

     </s:iterator> 
     <tr> 
      <td><input class="buttons" type="submit" value="Update" /></td> 
     </tr> 
    </table> 
</form> 
+0

Y a-t-il un 'setValue (String [] v)' dans l'action? – fustaki

+0

Avez-vous vu le journal montrer que l'action 'update' est effectivement appelée lorsque vous appuyez sur le bouton' update', si oui, pourriez-vous montrer votre action 'update'. – fangxing

+0

@fustaki Oui, j'ai setter et getter pour la valeur dans la classe d'action – Ariana

Répondre

0

champs de formulaire sont liés par leur attribut name. Il doit s'agir d'une expression OGNL correcte, évaluée par l'intercepteur params par rapport au valueStack. Le bean d'action doit être sur top du valueStack lorsque les paramètres sont remplis, si votre action n'est pas pilotée par le modèle, alors le bean action sera rempli s'il a des accesseurs de propriété correspondants.

Le problème est dans votre code que vous utilisez des scriptlets (qui sont fortement déconseillés, voir How to avoid Java code in JSP files?) et a un bug dans le code name="<%="value[" + i + "]"%>.


la recherche sur le code que vous avez récemment mise à jour dans votre question

<s:textfield name="value[%{#rowStatus.index}]" value="%{propertiesForm.getValue(#rowStatus.index)}"/> 

Je vois que la valeur vient de propertiesForm propriété, mais le champ de formulaire est lié à la propriété d'action. Il peut ne pas avoir setter correspondant pour remplir la valeur de la propriété lorsque le formulaire est soumis. Je recommande de lier la valeur à propertiesForm, de sorte que vous n'avez même pas besoin de value pré-rempli, puisque la valeur évaluée par l'attribut name.

<s:textfield name="propertiesForm.value[%{#rowStatus.index}]" />