使用spring form标记为空字段传递null

时间:2015-02-11 20:06:51

标签: java spring spring-mvc spring-form

我使用Spring表单标签将分组字段列表发送到Spring控制器。其中一些可能是空的。例如

JSP页面

<form:input path="id" size="30" value=""/>
<form:input path="name" size="30" value=""/>
<c:forEach var="i" begin="0" end="4">
  <form:input path="myLog[${i}].dateOfCall" size="10" value=""/
  <form:input path="myLog[${i}].activity" size="30" value=""/>
</c:forEach>

我的模型字段看起来像

Class MyModel {
  String name;
  String id;
  List<MyLog> myLog;
  public static class MyLog {
    String dateOfCall;
    String activity;
}

现在当我没有填写任何myLog时,我得到所有5个myLog对象的空值。

所以我的问题是有一种方法可以根据日志用户输入的数量来设置myLog大小。例如,如果用户输入没有日志信息,则其大小应为0。

1 个答案:

答案 0 :(得分:1)

从您发布的JSP代码中,我认为最终会在浏览器中呈现这样的内容:

<input id="myLog[0].dateOfCall" name="myLog[0].dateOfCall" size="10" value="" />
<input id="myLog[0].activity" name="myLog[0].activity" size="30" value="" />
... 1, 2, 3 ...
<input id="myLog[4].dateOfCall" name="myLog[4].dateOfCall" size="10" value="" />
<input id="myLog[4].activity" name="myLog[4].activity" size="30" value="" />

对于Spring Forms,这意味着,即使所有输入字段都留空,它也应该创建五个(空)myLog个对象。

如果你想解决这个问题,我建议只按需创建输入块(如果用户真的想要创建它们)。 你可以实现这一点,即使用JavaScript;只需添加“添加日志”按钮,并在其单击事件上创建一个块

<input id="myLog[xxx].dateOfCall" name="myLog[xxx].dateOfCall" size="10" value=""/>
<input id="myLog[xxx].activity" name="myLog[xxx].activity" size="30" value=""/>

在表单内的正确位置。

另一种可能性是验证收到的myLog对象,如果为空,则拒绝或者静默丢弃它。