1

我在一个项目中使用 Stripes,遇到了我无法理解的情况。在我的操作 bean 中,我有一个对象列表(用于设置应用程序配置参数),在 jsp 中,我为每个对象动态创建输入字段。对于正常的编辑,一切正常,但是如果我尝试设置一个字段来清空对象值,那么它仍然是以前的值。我已经广泛地查看了代码,并且确信我们编写的任何代码都没有完成它。当我调试时,我可以看到我的对象的 setValue() 方法正在为所有配置对象调用,除了空白的配置对象,而不是使用我所期望的空字符串调用 setValue。

有谁知道 Stripes 是否正在做一些影响这一点的事情?

谢谢

代码片段:

对象代码:

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;
  }
  ...
 }

动作豆代码:

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;
  }
  ...
}

查看 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>
...
4

1 回答 1

1

网络浏览器不会向 http 请求添加空字段。因此,通过删除 @Before 方法并将此代码放入view()方法中,您的问题将得到解决。

于 2010-08-23T09:18:45.757 回答