0

我正在验证对象列表。为了向用户显示他们输入的错误内容,我需要在转换错误时重新填充字段。我读到为了重新填充页面上的字段值,我需要执行以下操作:

<s:textfield name="user.name" value="%{user.name}"/>

对于重新填充数组,我必须通过索引引用它们。如此处所述: 更新 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}"部分不起作用。如果我更改它counter0它会重新填充 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">

我需要用大量的英语来解释你们为什么误解了我。我们可以删除这个帖子吗?谢谢

4

2 回答 2

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)“用户”是“用户”类型的列表,b)struts2转换框架已被告知用户是“用户”类型的列表,即像这样添加注释很简单:http: //struts.apache.org/2.3.1.2/docs/keyproperty-annotation.html

满足这些条件...一次发送尽可能多的内容,而无需使用数组表示法,您可以重新填充字段。

现在,您为什么希望表单值在提交失败后重新填充?那是你如何使用验证?如果由于某种原因您不是,您已经在 INPUT 或 ERROR 的值上创建了一些操作映射以直接返回输入页面(当验证框架存在时,这是一种浪费努力)。

于 2012-02-10T20:37:53.493 回答
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>
于 2012-02-10T11:51:42.770 回答