Rayures - champs d'entrée générées dynamiquement liés à la collecte ne peut être mis à vider

StackOverflow https://stackoverflow.com/questions/3498026

  •  29-09-2019
  •  | 
  •  

Question

J'utilise Stripes pour un projet et qui ont une situation que je ne comprends pas. Dans mon grain d'action que j'ai une liste d'objets (pour le réglage de configuration de params app) et dans le jsp Je crée dynamiquement des champs d'entrée pour chaque objet. Pour un tout modifier normale fonctionne bien si je tente de définir un champ pour vider la valeur de l'objet reste ce qu'elle était auparavant. Je l'ai regardé longuement le code et je suis convaincu qu'il ne se fait pas par tout le code que nous avons écrit. Quand je debug je peux voir que la méthode setValue () de mon objet est appelé à toutes les configurations d'objets, sauf celui qui est vide, plutôt que setValue appelé avec une chaîne vide qui est ce que j'attendais.

Quelqu'un sait si Stripes est en train de faire quelque chose sous le capot qui touche ce?

Merci

Bribes de code:

Code de l'objet:

public class Configuration implements Serializable {
  @Id
  @Basic(optional = false)
  @Column(name = "id", nullable = false)    
  private Integer id;

  @Basic(optional = false)
  @Column(name = "name", nullable = false, length = 100, updatable = false)
  private String name;

  @Basic(optional = true)
  @Column(name = "value", nullable = true, length = 200)
  private String value;
  ...
  public void setValue(String value) {
    //This is never called when I empty my input field
    this.value = value;
  }
  ...
 }

Action code Bean:

public class ConfigActionBean extends BaseActionBean {
  private List<Configuration> allConfigurationEntries;

  @Before(stages = LifecycleStage.BindingAndValidation)
  public void rehydrate() {
    allConfigurationEntries = configurationService.getAllEntries();        
  }

  @DefaultHandler
  public Resolution view() {
    return new ForwardResolution(
            "/WEB-INF/jsp/admin/configuration.jsp");
  }

  public Resolution Save() {       
    configurationService.saveAllEntries(allConfigurationEntries,is);
    return new RedirectResolution(ConfigActionBean.class,"view");
  }

  public void setAllConfigurationEntries(
        List<Configuration> allConfigurationEntries) {
    this.allConfigurationEntries = allConfigurationEntries;
  }

  public List<Configuration> getAllConfigurationEntries() {
    return allConfigurationEntries;
  }
  ...
}

Afficher le code JSP:

...
<c:forEach items="${actionBean.allConfigurationEntries}" var="items" varStatus="loop">
   <div>
      <s:label for="allConfigurationEntries[${loop.index}].value">${items.name}</s:label>
      <s:text id="${items.name}" name="allConfigurationEntries[${loop.index}].value" value="${items.value}" />
   </div>
</c:forEach>
...
Était-ce utile?

La solution

webbrowsers ne pas ajouter des champs vides à la demande http. Ainsi, en supprimant la méthode @Before et de mettre ce code dans le vue () méthode Vous êtes problème sera résolu.

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