0

私は非常に単純な問題を抱えています。以下は、複数のチェック ボックスを行に表示する JSP コードです。デフォルトではすべてのチェックボックスがチェックされており、ユーザーが特定の行を無視したい場合は、その行のチェックボックスをオフにします。

私の問題は、行のチェックボックスがチェックされておらず、他のフィールドが原因で、Struts が画面にフォーム検証エラーをスローすると、選択されていないチェックボックスがチェック済みとして表示されることです。何か不足していますか?Struts 検証がない場合、すべてが正しく見えます。

<c:forEach var="map" items="${form.displayList}" varStatus="index"> 
    <html-el:checkbox styleId="someCheckbox_${index.index}" property="someCheckboxes[${index.index}]"  />
     <td> .....</td>
     <td> .....</td>
     <td> .....</td>
</c:forEach>
4

1 に答える 1

1

データを Struts に送信すると、次のことが起こります。

  • Struts にはフロント コントローラーがあり、すべてのリクエストはこのコントローラーを経由します。これはActionServletクラスであり、構成された内容に基づいてstruts-config.xml、リクエストを適切なActionクラスに渡します。
  • それが起こる前に、それがセッション保存されたフォームである場合、ActionFormインスタンスが構築または再利用されます。
  • reset()ActionForm で呼び出されます。ここで、チェックボックスのプロパティを false にリセットします。チェックされていない HTML チェックボックスは送信時にリクエストで送信されないため、Struts はリクエスト データ バインディングを行わないため、これが必要です (ページをロードしたときにチェックされていた場合、ユーザーが送信時にチェックを外してもチェックされたままになります)。
  • ActionForm に要求データが取り込まれます (チェックされたチェックボックスはすべてチェックされ、送信時に送信されなかったチェックボックスは以前のリセットのためにチェックされていません)。
  • で指定されている場合は、ActionForm のvalidate()メソッドが呼び出されstruts-config.xmlます。
  • 検証が失敗した場合、指定されている場合はコントロールが入力 JSP に返されますstruts-config.xml(送信されたデータは、ActionForm 上にあるため、ページに表示されるものです)。
  • 代わりに検証が成功した場合はexecute()、Action クラスのメソッドが呼び出されます。
  • アクション クラスはその役割を果たし、一部の JSP に転送します。

これがStrutsの使い方ですか?私の推測では、Action クラスでいくつかの入力/リセット/検証を行っており、検証が失敗すると、デフォルトのデータで ActionForm をリロードします。

ActionForm のコードと Action クラスをreset()チェックして、データがチェックバックされる場所を確認します。validate()execute()

于 2012-07-17T20:08:59.257 に答える