1

ShowDataデータベースからデータを回復してjspに配置するというアクションがあります。

struts.xml

...
<action name="ShowData" class="foo">
   <result>foo.jsp</result>
</action>
...

foo.jspページには、ShowDataアクションで取得したフォームとデータがあります。

foo.jsp

...
<s:form action="DoSomething">
   <s:input key="email" />
   <s:submit/>
</s:form>
<s:iterator value="data_recovered_in_ShowData">
   ...
</s:iterator>
...

次に、データに検証を追加します。の戻りタイプDoSomethingが次のような場合:実際<result name="input">foo.jsp</result>に回復したデータは失われますShowDataが、検証は完全に機能し、ユーザーの以前の入力とエラーがjspページに表示されます。

一方、私は、を使用chainして次のようなことを行い<result name="input" type="chain">ShowData</result>、MessageStoreInterceptorを使用してデータを回復できることを知っています(ただし、ユーザーが入力で導入した以前のデータを回復する方法はまだわかりません)。しかし、これは私が避けようとしている解決策です。チェーンを使用するのは良い考えではないことを読んだからです。

では、この場合、データを失うことなく、チェーンを使用せずに、検証を追加するにはどうすればよいですか?

4

2 に答える 2

2

1つのオプションは、同じ名前の前のアクションから回復したすべてのデータに対して隠れた変数を宣言することです。チェーンを使用する場合の2番目のオプションでは、struts.xmlファイルでリダイレクトを使用し、復元されたデータをstruts.xml自体を介して送信できます。例は次のとおりです。

   <action name="ShowData" class="foo">
        <result>foo.jsp</result>            
        <result name="redirect" type="redirect">
            <![CDATA[paxAcctCharge.do?value1=${value1}&value2=${value2}]]>
        </result>
    </action>

これがお役に立てば幸いです。

于 2012-07-05T00:11:12.253 に答える
1

最初のアクションでDBデータを取得するだけの場合は、いくつかのオプションがあります。

  1. 使用Preparableし、両方のアクションで適切なサービスを使用してデータを取得します。
  2. 同じですが、両方のアクションがprepareスーパークラスからメソッドを継承します。
  3. 不要になるまでデータをセッションに保持します(手動で、インターセプターを使用して実行できます)。

懸念事項が以前のフォームデータ(質問に示されていない)である場合は、同様のオプションがあります。

  1. 非表示のフィールド(Tapanの回答として)ですが、まだDBにない場合は、それを検証する必要があります。(DBにある場合は取得できます。含まれておらず、非表示データの検証エラーがある場合は、前のフォームにリダイレクトする必要があります。)
  2. 再検証を避けて、そのデータをセッションに保持します。送信が成功したらデータを削除します。(これも、既存または新規のインターセプターを介して、または手動で実行できます。)

どちらのシナリオにも、他にもいくつかのオプションがあります。

最終的に、データの取得にのみチェーンを使用している場合、それは悪い考えです。これはまさにそのためのシナリオでPreparableあり、アクション間の結合を排除します。

于 2012-07-11T12:48:30.400 に答える