锁定老帖子 主题:struts2验证框架小结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-15
最后修改:2009-10-15
最近使用了一下struts2的验证框架,感觉不错。但其中也发现了一些技巧和问题,先总结如下。 1、建立一个实体类,主要是对因为登陆而设置的这个验证框架,所以首先创建一个用户实体类
import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; /* * * 用户 * */ @Entity @Table(name = "user_tbl") public class UserEntity extends BaseEntity { /** * */ private static final long serialVersionUID = 1L; /** * 用户名 */ private String name; /** * 用户密码 */ private String password; @Column(name = "name", length = 255, nullable = false) public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "password", length = 255, nullable = false) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2、创建登陆的Action类 import com.opensymphony.xwork2.ActionSupport; import com.zaotao.entity.UserEntity; import com.zaotao.service.manage.IAdminService; /** * 管理员的普通action * @author 管理员 * */ public class AdminAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; /** * 用户实体 */ private UserEntity user; /** * 验证码 */ private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public UserEntity getUser() { return user; } public void setUser(UserEntity user) { this.user = user; } /** * 登录 * @return 登录成功 */ public String loginAdmin() { return "success"; } } 3、由于struts2的查找机制(这个可以参考相关资料),我们在这两个类所在的包中分别新建UserEntity-validation.xml和AdminAction-validation.xml (1)UserEntity-validation.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="name"> <field-validator type="requiredstring"> <message>账号不能为空</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>密码不能为空</message> </field-validator> </field> </validators> (2)AdminAction-validation.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="user"> <field-validator type="visitor"> <message>用户:</message> </field-validator> </field> <field name="code"> <field-validator type="fieldexpression"> <param name="expression"> #session.CODE.equalsIgnoreCase(code) </param> <message>${#session.CODE}:${code}</message> </field-validator> </field> </validators>
4、建立登陆的jsp页面 <s:form id="loginForm" action="login_AdminAction"> <div class="admin_main_top"></div> <div id="admin_main"> <div class="admin_main_head"></div> <div id="admin_main_content"> <ul class="admin_main_ul"> <li> <label>用户名:</label> <s:textfield name ="user.name" id="name"/> <span id="usererror" class="errorMeg"></span> </li> <li> <label>密码:</label> <s:password id="pwd" name="user.password" onfocus="clearError('pwderror')" /> <span id="pwderror" class="errorMeg"></span> </li> <li> <label>验证码:</label> <img src="<%=contextPath %>/authImg.servlet" id="authImg" onclick="refresh()" /> <s:textfield name="code" id="code" onFocus="clearError('codeerror');" /> <span id="codeerror" class="errorMeg"></span> </li> <li> <s:submit id="login_button" value="登录" /> </li> </ul> </div> </div> <div><s:fielderror cssStyle="color: red"></s:fielderror></div> </s:form> Action的配置就不写了,说一下注意点。 (1) <field-validator type="visitor"> 这段代码中message标签内不能为空,否则将会报错,visitor类型的作用在于,当验证字段user时,将获得user的类型,并根据类型UserEntity查找UserEntity-validation.xml,执行验证。 (2) 当你使用了图形验证码,你想在验证框架中将其进行验证时。需要先将图形验证码的字符串放入session中,然后在验证框架中验证。 (3) 如果你的表单使用的是simple方式,那么s:form是不会显示错误信息的,那么 我们在jsp页面写入 <s:fielderror cssStyle="color: red"></s:fielderror>,用来输出错误信息,当然你也可以针对每个字段输出错误信息。如果错误信息重复显示,说明你的action采用的单例模式,请将其修改为scope="prototype" (4) 使用struts验证框架,需要配置input结果跳转。 (5) 若校验同时提供XML和validate()两种方法,则都会被执行,而且是XML校验先执行,validate()方法后执行。而错误信息都会显示。"short-circuit"属性仅针对xml有效
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-15
我个人感觉UserEntity-validation.xml的命名不是很好,应该是Action的类名+struts.xml中定义的action名称+validation.xml,比较好。这样,同一个Action类,在配置文件中的不同定义就可以对应不同的验证文件。
|
|
返回顶楼 | |
发表时间:2009-10-15
wangguanqiu 写道 我个人感觉UserEntity-validation.xml的命名不是很好,应该是Action的类名+struts.xml中定义的action名称+validation.xml,比较好。这样,同一个Action类,在配置文件中的不同定义就可以对应不同的验证文件。 恩,因为目前东西,还比较少,有些东西还在测试和验证,等到出现此类需求时。会采用2楼的建议,非常感谢你的意见 |
|
返回顶楼 | |
浏览 19013 次