题
我正在将条纹用于一个项目,并且有一种我无法理解的情况。在我的操作bean中,我有一个对象列表(用于设置应用程序配置参数),在JSP中,我正在动态为每个对象创建输入字段。对于普通编辑,一切正常,但是如果我尝试设置一个字段以清空对象值,则仍然是以前的原样。我已经广泛浏览了代码,并且相信它没有由我们编写的任何代码完成。当我调试时,我可以看到我对象的setValue()方法都被调用所有配置对象,除了空白的对象,而不是用一个空字符串调用setValue,这是我所期望的。
有人知道条纹是否正在在引擎盖下做某件事?
谢谢
代码片段:
对象代码:
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>
...
解决方案
WebBrowsers不会在HTTP请求中添加空字段。因此,通过删除@before方法并将此代码放入 看法() 您发行的方法将得到解决。
不隶属于 StackOverflow