簡體   English   中英

條帶-綁定到集合的動態生成的輸入字段無法設置為空

[英]Stripes - Dynamically generated input fields bound to collection unable to be set to empty

我正在將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;
  }
  ...
 }

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

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

Web瀏覽器不會將空字段添加到http請求。 因此,通過刪除@Before方法並將此代碼放入view()方法中,可以解決您遇到的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM