struts2验证和准备方法有关

时间:2014-04-05 03:17:46

标签: validation struts2 struts2-interceptors

在一个custprofileview动作中显示一个JSP页面,其中包含客户的所有详细信息,在我的JSP中,所有字段都像我的

<s:textfield name="custprofileVO.email" value="%{custprofileVO.email}" />
<s:textfield name="custprofileVO.phone" value="%{custprofileVO.phone}" />

并执行此操作,并且有一个提交按钮,可以调用操作updatecustprofile

updatecustprofile Action中,我没有直接映射属性,而是有一个成员变量private CustprofileVO custprofileVO; 与二传手和吸气鬼。

CustprofileVO课程中,我有emailphone等字段以及所有其他字段及其setter和getters方法。

问题:在updatecustprofile操作中我正在实施Prepareable接口,在实施prepare()方法时,我有custprofileVO.setDefaultID("Select");并设置4更多字段但是当我通过点击提交按钮运行程序时,我会在NPE的第一行显示custprofileVO.setDefaultID("Select");

看起来框架没有实例化CustprofileVO custprofileVO。如果我在字段设置之上手动实例化custprofileVO(通过执行custprofileVO = new CustprofileVO(),那么它可以正常工作。 问题是 - 理想情况下struts2框架应该给我一个它没有做的实例,想了解原因。

此外,如果我在prepare方法中手动设置custprofileVO它可以工作,但我还使用XML进行验证,其中我的字段名称为custprofileVO.email,其验证然后custprofileVO.phone验证。

当我尝试验证点击提交按钮验证时,但是在屏幕上我会看到所有字段的消息,因为所有文本框中的数据都会被删除。

为什么要删除数据?

1 个答案:

答案 0 :(得分:0)

您不应该自己实例化来自JSP的对象。

要使用prepare()方法进行操作,请先Prepare Interceptor Param Interceptoryou need to use a special stack {{1} }}

paramsPrepareParamsStack