我正在运行一个基本的 Struts2 应用程序,其中我感到困惑。
我的动作类实现Preparable
和ModelDriven
接口并扩展类ActionSupport
。模型 bean 有一个名为User
.
我的主页(jsp) 有一个输入字段,对应于User
模型bean 的唯一属性。
在prepare()
方法中,我正在初始化 bean 并将其属性设置为某个默认值,例如"Test"
,该getModel()
方法正在返回此 bean 对象。
在validate()
中,我有一个验证,如果User
bean 的属性的值等于"Test"
然后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
但是如果我"Stack"
在表单字段中输入任何值并提交表单,则验证方法会打印用户输入的值,而模型方法正在打印准备初始化的内容。
inside getModel..Test
inside getModel..Test
inside validate...Stack
为什么这样?为什么两种方法不同步?验证方法和模型方法是否从不同位置选择属性值?