我正在运行一个基本的Struts2应用程序,在这个应用程序中我遇到了一个困惑。 我的动作类实现了Preparable和ModelDriven接口,并扩展了ActionSupport类。模型bean有一个名为“User”的属性。Struts2中验证的属性值和模型方法的区别
我的主页(jsp)有一个对应于模型bean的唯一属性“User”的输入字段。在prepare()方法中,我初始化bean并将其属性设置为某个默认值,例如“Test”,并且model()方法返回此bean对象。在验证(),我有一个验证,如果“用户”属性的价值等于“测试”,然后addFieldError其他继续进行。
public Student getModel() {
System.out.println("inside getModel.."+ st.getName());
return st;
}
public void validate(){
System.out.println("inside validate"+st.getName());
if(st.getName().equals("Test")){
addFieldError("name","blank field");
}
}
public void prepare() throws Exception {
st = new Student();
st.setName("Test");
}
现在,我的问题是,当我访问的动作直接随后的错误出现在控制台中我得到了如下记录:
inside getModel..Test
inside getModel..Test
inside validate...Test
,但如果我输入任何价值说“堆栈”中表单字段和提交表单然后验证方法打印用户输入的值,而模型方法是打印准备初始化的值。
inside getModel..Test
inside getModel..Test
inside validate...Stack
为什么这么说?为什么两种方法都不同步?验证方法和模型方法是否从不同位置选取属性值?
谢谢。
我错过了拦截器运行的顺序。谢谢。 – Infotechie
@Infotechie它与上下配置文件中的顺序相同。看看'interceptor-stack'标签。 –