使用Spring Form标签编辑功能

时间:2012-03-22 17:34:04

标签: forms spring-mvc

在我的网络应用中。我有一个域对象(bean),我通过hibernate映射到我的一个表,我使用相同的域对象引用我的“addcustomer.jsp”中的spring form标签,用于添加客户,这种方式每当一个客户添加了spring form标签填充我的域对象,我可以将其保存到我的数据库中。但是,当我在“editcustomer.jsp”中使用相同的技术时,我在控制器中获取的域对象会刷新所有字段信息,并且只向我提供已更改/编辑的信息。因此,我不能盲目地将整个域对象持久保存到我的数据库中,因为它没有其他信息。

我认为spring form刷新现有bean的所有信息,用可用信息重新填充它并将其发布到请求中,我不确定spring form标签的行为,但这是我能猜到的。 / p>

如果这是一个真正的问题,那么以下是我可以得到的两个可能的解决方案 1.而不是盲目地将域对象持久化到db,查询db以获取现有记录并执行合并/替换 - 这种方法导致额外的db调用,然后在转到editcustomer之前保留已经创建的数据。 JSP 2.在jsp端保留请求上的域对象的副本,并将相同的副本与spring form created bean一起返回,并在控制器端执行合并。 - 可能不是个好主意

您认为我们可以通过其他方式实现这一目标吗?或者在这种情况下使用spring form标签不是一个好主意

由于 维诺德

2 个答案:

答案 0 :(得分:1)

在渲染editcustomer.jsp之前,必须将customer对象加载到模型中。然后你可以使用这样的表格:

<form:form commandName="customer">
    <form:hidden path="id" />
    ...
    First Name:<form:input path="firstName" />
    Last Name:<form:input path="lastName" />
    <input type="submit" value="Save Changes" />
</form:form>

将您不希望被用户编辑的值添加为表单中的隐藏字段。这样,当控制器将表单绑定到您的对象时,它将具有所需的所有信息。

答案 1 :(得分:0)

您可以先检查是否已使用path属性将值绑定到spring的表单字段,因为如果已使用path属性正确绑定pojo类变量以形成标记,则在表单提交上使用Web数据绑定器使用变量setter方法将字段的值设置为pojo变量。有关代码的更好理解请参阅@Vasileios Liolios答案。