Struts2 Web アプリ (JQuery プラグインを使用) で Ajax 検証を使用しようとしていますが、問題があります。
@Validations アノテーションの使用に問題があったため、validate() メソッドをオーバーライドしただけで、検証中に xhtml フォームですべて正常に動作するようになりました。fieldsErrors はよく受信され、GUI に出力されます。
実際には、フォームが検証されると、アクションを起動するために 2 番目の POST がサーバーに送信されます。しかし、理由はわかりません。フレームワークはモデルの属性を設定せず、アクションの実行後の HTML 応答の生成中に、フレームワークは属性にアクセスできません (jsonValidationWorkflowStack を使用する場合のみ)。
簡単な例を作成しました:
アクション
@Namespace("/actions")
@ParentPackage("actions")
@InterceptorRef(value = "jsonValidationWorkflowStack")
public class ActionTest extends ActionSupport implements
ModelDriven<ModelTest>, ParameterAware {
private static final long serialVersionUID = 1L;
private ModelTest model;
private Map<String, String[]> parameters;
public ActionTest() {
model = new ModelTest();
}
@Action(value = "actionTest", results = {
@Result(name = SUCCESS, location = "/jsp/win.jsp"),
@Result(name = ERROR, location = "/jsp/loose.jsp"),
})
public String executeAction1() throws Exception {
System.out.println("pass: "+getModel().getPass()); //the field is always null
if ("test".equals(getModel().getPass()))
return SUCCESS;
return ERROR;
}
@Override
public ModelTest getModel() {
return model;
}
@Override
public void validate() {
String field;
if (parameters.get("pass") != null) {
field = parameters.get("pass")[0];
if (field == null || field.isEmpty())
addFieldError("pass", "the field is not set");
else if (!"test".equals(field))
addFieldError("pass", "the password is \"test\"");
}
}
@Override
public void setParameters(Map<String, String[]> arg0) {
this.parameters = arg0;
}
}
モデル
public class ModelTest {
private String pass;
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
フォーム
<s:form action="actionTest" theme="xhtml">
<s:textfield name="pass"/>
<sj:submit validate="true"/>
</s:form>
この例では: - パスワードが "test" であっても常に Loose.jsp にリダイレクトされます - このアクションによってリダイレクトされた別の jsp で a を出力したい場合、何も表示されません (モデル)。
手を貸してくださいませんか?
PS: 下手な英語でごめんなさい:/