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>

オブジェクト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と、users [0].birthdaterightの値が再入力されます。OGNL式でcounterの値を取得していないようです。

私は試してみました:

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)「users」はタイプ「User」のリストであり、b)struts2変換フレームワークはusersがタイプ「User」のリストであると通知されていること。そのような注釈を追加するのと同じくらい簡単です: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 に答える