Strut2数据验证
※
-
<package name="default" namespace="/" extends="struts-default"> -
<action name="login" class="login" method="login"> -
<result name="login_result"> -
/login.jsp -
</result> -
</action> - </package>
※
※
※
l 三种方式验证,一种比一种稍稍复杂
1.直接在login方法中创建对应变量
2.使用上面建立的account
3.使用接口,实现ModelDriven
u 第一种:
- 被strut2调用的类中:
- private
String account=""; - private
String password=""; - public
String getAccount() { - return
account; - }
-
- public
void setAccount(String account) { - this.account
= account; - }
-
- public
String getPassword() { - return
password; - }
-
- public
void setPassword(String password) { - this.password
= password; - }
这样,当表单提交后,strut2会自动的赋值。注意strut2寻找的名字是get和set后的名字。
u 第二种:
定义一个model类:
-
- public
class Account { -
- private
String account=""; - private
String password=""; - public
String getAccount() { - return
account; - }
- public
void setAccount(String account) { - this.account
= account; - }
- public
String getPassword() { - return
password; - }
- public
void setPassword(String password) { - this.password
= password; - }
- }
被strut2调用的类中:
-
private Account account; -
- public
account getAccount1() { - return
account1; - }
-
- public
void setAccount1(account account1) { - this.account1
= account1; - }
这样,当表单提交后,strut2会自动给对象中的属性赋值。
值得注意的是,表单提交的属性name中,使用这样的写法:account.account和account.password
前面是对象名字,后面是属性。
u 第三种
首先是对象,和第二种一样,先创建个model,不提。
然后是被strut2调用的类中:
类要继承ModelDriven接口
- public
class login extends ActionSupport implements ModelDriven{ -
- private
Account account= new Account(); //对象赋值的方法 -
- @Override
- public
Account getModel() { - //
TODO Auto-generated method stub - return
account; - }
- .....
- }
这样需要先继承ModelDriven接口,并说明接口实现的model,然后再在其中实现getModel()的方法。
就可以在下面验证了。
例如:
- public
String login(){ - System.out.println("用户
"+account.getAccount()+" 请求登陆"); - if(account.getAccount().equals("我")&&account.getPassword().equals("1")){
- System.out.println("登陆成功");
- System.out.println("账号:"+account.getAccount());
- System.out.println("密码:"+account.getPassword());
- return
"login_result"; - }
- else{
- System.out.println("登陆失败");
- //将错误信息加入
错误堆栈中: - this.addFieldError("account",
"密码错误,登陆失败"); - return
"login_result"; - }
- }
这里直接验证了,没有查询数据库,方便操作。
l 最后,是错误信息反馈
在上面第三种后面的验证中,用了:
this.addFieldError("account",
来将验证错误的信息加入到错误反馈堆栈中。
那么加进去了后怎么将它输出来呢
看下面:-------------------------------------------------
*在需要反馈错误信息的JSP页面中:
在最前面的配置引用中添加:<%@taglib
//taglib
意思是要导入taglib库,这个库的tld文件路径是uri="/struts-tags"
*然后再在下面要显示的地方显示错误信息,有两种提取方式:
1.strut2规定的方式,错误标签显示:
<s:fielderror
2.自定义的提取字符串方式,直接JSP中:
<s:property
输出测试:
<s:property
<s:property
<s:property
3.可以使用<s:debug></s:debug>标签来显示详细的错误堆栈信息。
当使用debug标签的时候,jsp页面会出现:
这个连接,点击后出现堆栈错误信息的详细内容:
l 同样的,信息传递反馈(普通信息反馈,比如成功)
同错误信息反馈原理一样,使用堆栈传递信息,这个。。。是我自己琢磨的。同样的可以添加多条
this.addActionMessage("登陆成功1
this.addActionMessage("登陆成功2
在成功验证后把信息添加到反馈的堆栈,其实当我们敲下this.add的时候会出现三个方法:
第一个方法是action错误信息
第二个是action用户自定义信息
第三个是field错误信息
其实三个方法都可以自己随便用,不过正规点的话就哪个用哪个了、、、。、
==========================================================================
用this.addActionMessage("登陆成功1
Jsp页面:
和上面的errors信息调取一样有两种方法:
1.<s:actionmessage
2.<h1><s:property
第一种方法,直接拉取所有的信息固定方式显示,因为actionMessages是整个数组对象,没法选取单个
第二种方法,选择某个信息拉取,并可以得到字符串,之后想怎么弄怎么弄。。。呵呵。。
效果: