我正在尝试在我的 Struts2 Web 应用程序(使用 JQuery 插件)中使用 Ajax 验证,但我遇到了问题。
我在使用 @Validations 注释时遇到了问题,所以我刚刚覆盖了 validate() 方法,现在在验证期间我的 xhtml 表单一切正常。fieldsErrors 很好地接收并打印在 gui 中。
事实上,当表单被验证时,第二个 POST 被发送到服务器以启动 Action。但是,我不知道为什么,框架没有设置模型的属性,并且在执行Action后生成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”,我总是被重定向到松散.jsp - 如果我想在另一个由这个动作重定向的 jsp 中打印 a,我什么也没看到(即使我在模型)。
你能帮我一把吗???
PS:对不起我的英语不好:/