您的位置:首页 > 编程语言 > Java开发

基于ssh2架构的struts2验证框架错误解决

2012-09-14 17:57 447 查看
本人尝试struts2输入验证,总是出现如下状况



这是一个注册的action,多次点击“提交”,出现这种状况

其次,如果第一次没有正确填写(故意柳一个空不填来尝试验证功能),那么再重新 非空验证 之后,仍然无法注册到数据库,核心代码如下

<bean id="regAction" class="cn.blog.action.RegAction">
<property name="userService" ref="userService"></property>
</bean>

package cn.blog.action;

public class RegAction extends ActionSupport {
private String id;
private String password;
private String sex;
private String username;
// 注册组件userService
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}

/*

 getter,setter省略

*/
@Override
public String execute() throws Exception {

User user = new User();
user.setId(id);
user.setPassword(password);
user.setSex(sex);
user.setUsername(username);

if (userService.regUser(user)) {
return SUCCESS;
} else {
return ERROR;
}
}

}

验证xml代码

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">

<validators>

    <field name="id">

        <field-validator type="requiredstring">

        <param name="trim">true</param>

            <message>帐号不可为空 </message>

        </field-validator>

    </field>

    <field name="password">

        <field-validator type="requiredstring">

        <param name="trim">true</param>

            <message>密码不可为空 </message>

        </field-validator>

    </field>

省略部分xml代码

    

</validators>

解决方法:将applicationContext.xml配置文件中,相关Action(此处为regAction)

<bean id="regAction" class="cn.blog.action.RegAction"  scope="prototype">
<property name="userService" ref="userService"></property>
</bean>

加上红色代码  scope="prototype",问题解决

当未配置这点代码的时候,默认scope=“singleton”,如果第一次没验证通过,就算之后重新正确填写,非空验证,那么还是对scope=“singleton”状态下生成的对象x 进行操作,而对象x 是出现验证错误的生成对象,所以这样,singleton是单例

而prototype正好相反,来一个请求,新生成一个实例 。问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐