2

私の Struts2 JSP フォームには、テキスト フィールドと select タグがあります。例えば、

<s:form>
<s:textfield name="name" label="Name"/>
<s:textfield name="dob" label="Date of Birth"/>
<s:select name="degree" list="degreeList" listKey="degreeID" listValue="degreeName"/>
<s:submit/>
</s:form>

この JSP をロードする前にdegreeList、アクション クラスを埋めました。このフォームを検証する必要があります。そこで、検証フレームワークを試しました。"input"しかし問題は、検証が失敗した場合にアクション クラスがそれ自体を返すことです。degreeList検証に失敗した場合、補充できません。したがって、上記の JSP はロードできません。degreeListリストが値スタックになくなったため、エラーはis not list/collection と表示されます。別の方法で検証する方法を教えてください。ありがとう。

4

2 に答える 2

3

execute() で検証を行い、必要な結果文字列を返したり、例外をスローしたりすることを妨げるものは何もありません。

しかし、本当の問題は、「検証が失敗した場合、degreeList を再入力できない」ことのようです。なぜ、同じフォームに送り返すことができないのですか?

アクションに注釈を付けて (または struts.xml を使用して) 適切なページにリダイレクトできるようにする必要があります。「入力」が返された場合は、それがフォームが送信される前のページまたはそれほど合理的ではない「申し訳ありません」と述べているページを意味する場合でも。間違った値で、フォームの時間に敏感な性質のため、再試行のオプションを提供することはできません :)"

更新

@Results ({ @Result(name="input", location="/package/my-action") })

于 2013-04-28T18:01:30.300 に答える
3

validate()解決しなければならない問題は、メソッドから戻ったときにリストを再作成することだけです。あなたの行動は を拡張すると思いますActionSupport。そうでない場合は、それを行う必要があります。メソッドをオーバーライドしvalidate()ます。と をチェックする必要がありhasActionErrors()ますhasFieldErrors()。存在する場合は、リストを再作成します。JSP のレンダリングに使用されたコードを分離し、validateメソッドで再利用することをお勧めします。アクションを実行せず validate()に結果が返された後。INPUT

于 2013-04-28T18:47:31.717 に答える