【发布时间】:2012-02-10 11:09:31
【问题描述】:
我正在验证对象列表。为了向用户显示他们输入的错误内容,我需要在转换错误时重新填充字段。我读到为了重新填充页面上的字段值,我需要执行以下操作:
<s:textfield name="user.name" value="%{user.name}"/>
为了重新填充数组,我必须通过索引来引用它们。如此处所述: update a list of value in textfield in struts2
我有一个需要验证的用户列表。 出于特定原因,我在迭代器上有自己的索引计数器。
<s:set name="counter" value="0"/>
<s:iterator value="users" var="user">
<s:textfield name="users[%{#counter}].birthdate" value="%{users[#counter].birthdate}"/>
<s:set name="counter" value ="%{#counter + 1}"/>
</s:iterator>
我正在为对象用户使用访问者验证器。
<field name="birthdate">
<field-validator type="conversion">
<param name="repopulateField">true</param>
<message>${getText("E011", {"birthdate"})}</message>
</field-validator>
</field>
正如我所说,出于特定原因,我没有使用迭代器索引计数器。
问题是这个value="%{users[#counter].birthdate}" 部分不起作用。如果我将 counter 更改为 0 它会重新填充 users[0].birthdate 的值。似乎它没有在 OGNL 表达式中获得计数器的值。
我试过了:
value="%{users[counter].birthdate}"
value="%{users[%{#counter}].birthdate}"
...
and so on.
有人可以帮我完成这项工作吗?
更新
结果我应该提到我的特殊情况:
<s:iterator value="users" var="user" status="status">
<s:if test="#status.index != removeIndex">
我发现我不需要为字段名称指定值来重新填充值。 但由于这条线,我需要使用它:
<s:if test="#status.index != removeIndex">
我需要花费大量的英语努力来解释你们为什么误解了我。我们可以删除这个帖子吗?谢谢
【问题讨论】:
-
计数器值将用于指向列表中对象的生日属性,如
users.get(0).getBirthDay();,这意味着计数器实际上并不存在。 -
不使用已有产品的“具体原因”是什么?
-
虽然我们可以使用 Prepare 拦截器,即使有任何错误,它也会负责使值可用,但我仍然认为您的索引值不会存在。为什么您使用索引?可能还有其他的替代品
-
实际上,即使我使用#status.index,我也无法完成这项工作。我通过过滤索引省略了列表中的一些值。这就是我使用备用索引计数器的原因
标签: validation struts2 ognl repopulation