Hibernate、Struts 2、および Spring を使用してプロジェクトを開発していますが、問題は Struts にあります。
拡張する 3 つのクラスを作成し、それらすべてで同じクラスをActionSupport
実装しています。ModelDriven
アクションが呼び出されたときに実行されるメソッドをいくつか実装しました。
クラスの構造は次のようになります
Class1Action.java:
public class Class1Action extends ActionSupport implements ModelDriven<ModelDrivenClass> {
private ModelDrivenClass modelDrivenClass;
// getter and setter for modelDrivenClass
public String methodName() {
System.out.println("Entrou!");
return SUCCESS;
}
@Override
public Sensor getModel() {
return getSensor();
}
}
次struts.xml
の構造を使用して3つのアクションを作成しました
struts.xml:
<action name="actionName1" method="methodName" class="Class1Action">
<interceptor-ref name="validation">
<param name="excludeMethods">methodName</param>
</interceptor-ref>
<result name="success" >success.jsp</result>
<result name="input" >input.jsp</result>
</action>
それに加えて、さまざまな Struts アクションを参照する 3 つのボタンを持つ JSP と、3 つのアクション クラスで使用されるモデル駆動型クラスのフィールドを表すいくつかのフィールドと、<s:push>
タグ内のすべてのフィールドがあります。
問題は、フィールドにデータを入力していて、いずれかのボタンをクリックした直後に、フィールドのデータが欠落していることです。
メソッドを検証から除外する 3 つの Struts 行を削除しようとしましたが、フィールドが空になる代わりに、2 回目に同じボタンを押すと、彼は入力を返し、input.jsp にリダイレクトします。
次のコードはsuccess.jsp
、開始ページである からのものです。
success.jsp:
<form method="post" >
<s:push value="modelDrivenClass">
<s:textfield label="FieldLabel1" name="modelDrivenClassAttribute1" />
<s:textfield label="FieldLabel2" name="modelDrivenClassAttribute2" />
<s:textfield label="FieldLabel3" name="modelDrivenClassAttribute3" />
<s:textfield label="FieldLabel4" name="modelDrivenClassAttribute4" />
<s:textfield label="FieldLabel5" name="modelDrivenClassAttribute5" />
</s:push>
<s:submit action="actionName1" name="Submit1" value="Submit1" />
<s:submit action="actionName2" name="Submit2" value="Submit2" />
<s:submit action="actionName3" name="Submit3" value="Submit3" />
</form>
これが正しい方法かどうかはわかりませんが、実装するクラスを1つだけ使用しModelDriven
、このクラスに3つのメソッドすべてがある場合に機能しました。
コードを明確にし、すべてのメソッドを 1 つのクラスだけに持たせたくないので、この方法を試しています。