我正在验证对象列表。为了向用户显示他们输错的内容,我需要重新填充转换错误字段。我读到,为了在页面上重新填充字段值,我需要做这样的事情:
<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>
我正在为对象User使用访问者验证器。
<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
,则会重新填充用户[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">
我需要花费很多英语来解释你们为什么误解我的原因。我们可以删除这篇文章吗?感谢
答案 0 :(得分:1)
如果你问如何做某件事情会更好......而不是说你有理由这样做,当然这种方式不起作用。这让我很头疼......
我不明白这一点......
<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>
我会改写(不测试)我认为你的意思......
<s:iterator value="users">
<s:textfield name="users.birthdate" value="birthdate"/>
</s:iterator>
以上要求满足以下条件... a)“users”是“User”类型的列表,b)struts2转换框架已被告知用户是“User”类型的列表这就像添加注释一样简单:http://struts.apache.org/2.3.1.2/docs/keyproperty-annotation.html
满足这些条件......一次发送尽可能多的数据而不需要使用数组表示法,而可以重新填充字段。
现在,为什么您希望表单值在提交失败后重新填充?那你是如何使用验证的?如果由于某种原因你没有在INPUT或ERROR的值上创建一些动作映射以指向返回到输入页面(当验证框架存在时浪费精力)。
答案 1 :(得分:0)
请尝试使用以下代码,它可能会有效
<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>