精华帖 (1) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-04
jiyanliang 写道 那还真不如在Action里重写validate()方法。。 当然,每个人有每个人的写法。我只是觉得在Visitor校验器比较适应于对一个POJO的复合属性进行检测,不用每次都必须重写Action里的validate方法,而且,对于在一个Action里有多个类似于execute()处理逻辑的时候,就要重写多个validateXxx()方法了。 |
|
返回顶楼 | |
发表时间:2009-01-04
好东西,回去试一下..刚刚接触2.0
要学的东西太多了,而且这些框架更新又快.. |
|
返回顶楼 | |
发表时间:2009-01-05
我有几个问题:
1. 我之前写的好像要是内网服务器无法访问到外网的时候 或者网络差的时候 就会抛出异常,怎么让他在脱机情况下也可以用这个validation? 2. 这个验证是在server端验证吗? 3. 如果是,为什么不考虑用js验证呢?何必让server端来承受不必要的开销呢? |
|
返回顶楼 | |
发表时间:2009-01-05
最后修改:2009-01-05
cometlj 写道
很多和我一样的初学者可能手边都有一般李刚写的 《Struts 2 权威指南》,
其次,该功能我在struts2下用纯annotation方式没有配置成功,struts2的doc关于annotation也是几句带过,关键就是那个context还没搞明白怎么用annotation声明,别告诉我用xml,因为我已经用了annotation,不想写xml。等高人解惑。
@Validations( visitorFields = { @VisitorFieldValidator(message = "Default message", fieldName="user.username", shortCircuit = true, appendPrefix = true), @VisitorFieldValidator(message = "Default message", fieldName="user.password", shortCircuit = true, appendPrefix = true) } )
|
|
返回顶楼 | |
发表时间:2009-01-05
ffyahoo 写道 我有几个问题:
1. 我之前写的好像要是内网服务器无法访问到外网的时候 或者网络差的时候 就会抛出异常,怎么让他在脱机情况下也可以用这个validation? 2. 这个验证是在server端验证吗? 3. 如果是,为什么不考虑用js验证呢?何必让server端来承受不必要的开销呢? 第一个问题:我确实没遇到过这种情况,因为这个是服务器端的验证,所以我想你所说的内网访问外网或者脱机情况下也使用这个validation的话,我想是不可能的。 第二个问题:这个是Sever端的验证方式 第三个问题:JS验证当然也要用的,在实际的部署中,我们是要客户端验证和服务器端验证同时都有的。不然如果用户禁用了Javascript功能,或者通过其他的方式来Crack,我想后果是不堪设想的。至于你说的Server端不必要的开销,我想这个是正常的,不过通过客户端JS验证,基本90%的恶意或者非恶意输入产生的错误都在客户端被检测出来了,我想留个服务器的压力,在客户端和服务器端验证均存在的时候,也不是很大的。至少,在安全方面考虑,Client端和Server端的验证都要有。 |
|
返回顶楼 | |
发表时间:2009-01-06
ffyahoo 写道 我有几个问题:
1. 我之前写的好像要是内网服务器无法访问到外网的时候 或者网络差的时候 就会抛出异常,怎么让他在脱机情况下也可以用这个validation? 2. 这个验证是在server端验证吗? 3. 如果是,为什么不考虑用js验证呢?何必让server端来承受不必要的开销呢? 1.这个问题是不应该出现的,如果真的有,我猜想可能是去网络上寻找你在xml文件开始定义的dtd文件吧? 2. 是在server端验证的,你如果在struts2源代码中关于验证表单相关的部分代码设置断点,会发现框架会把验证到的错误加到一个map里面的。 3. js验证一般只是用来验证的第一步,就像银行,银行的铁门是js,而银行装钱的保险柜就是更深层的验证。其实struts2的form标签提供了一个自动生成js代码的属性的,好像是validate="true"?只是它生成的代码不太好用,也难以阅读,所以还不如我们自己去写,这样也便于代码的理解和管理。 |
|
返回顶楼 | |
发表时间:2009-01-06
password 和repasswrod 可以设置到pojo的属性,然后验证用表达式来做
|
|
返回顶楼 | |
发表时间:2009-01-06
最后修改:2009-01-06
kjj 写道
password 和repasswrod 可以设置到pojo的属性,然后验证用表达式来做
修改后的User的POJO为(repass为添加的属性) package org.lj.domain.hibernate; import java.util.Date; /** * User entity. * * @author MyEclipse Persistence Tools */ public class User implements java.io.Serializable { // Fields private Integer id; private String username; private String userpwd; private String repass; private Date createdAt; private Date updatedAt; // Constructors /** default constructor */ public User() { } /** minimal constructor */ public User(String username, String userpwd, Date createdAt) { this.username = username; this.userpwd = userpwd; this.createdAt = createdAt; } /** full constructor */ public User(String username, String userpwd, Date createdAt, Date updatedAt) { this.username = username; this.userpwd = userpwd; this.createdAt = createdAt; this.updatedAt = updatedAt; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getUserpwd() { return this.userpwd; } public void setUserpwd(String userpwd) { this.userpwd = userpwd; } public Date getCreatedAt() { return this.createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } public Date getUpdatedAt() { return this.updatedAt; } public void setUpdatedAt(Date updatedAt) { this.updatedAt = updatedAt; } public String getRepass() { return repass; } public void setRepass(String repass) { this.repass = repass; } }
<?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="username"> <field-validator type="requiredstring"> <message>请输入用户名称</message> </field-validator> </field> <field name="userpwd"> <field-validator type="requiredstring"> <message>请输入密码</message> </field-validator> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(userpwd==repass)]]></param> <message>确认密码不正确</message> </field-validator> </field> </validators>
相应的测试页面为register.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>用户注册页面</title> <link href="utils/css/public.css" type="text/css" rel="stylesheet" /> </head> <body> <div id="all"> <div id="header">header</div> <div id="content"> <div>已有账户,<a href="login.do">登录</a></div> <s:form action="pro_register.do"> <s:textfield name="user.username" label="用户名称" /> <s:password name="user.userpwd" label="登录密码" /> <s:password name="user.repass" label="确认密码" /> <s:submit value="注 册" /> </s:form> </div> <div id="footer">footer</div> </div> </body> </html>
两次输入的密码不同,检测成功 确认密码不正确的截图如下:
|
|
返回顶楼 | |
发表时间:2009-01-08
struts2验证是个大败笔,哈哈。信不信有你,如果没有改源码的水平,要是有正式项目敢用struts2验证的说下。
|
|
返回顶楼 | |
发表时间:2009-01-18
最后修改:2009-01-18
flysunsystem 写道 struts2验证是个大败笔,哈哈。信不信有你,如果没有改源码的水平,要是有正式项目敢用struts2验证的说下。
第一次听人这么说!不过这样的话,我发现,基于announced 的Hibernian validat 更方便 |
|
返回顶楼 | |