【Struts2】使用Struts2的数据验证功能

来源:互联网 发布:linux networking 编辑:程序博客网 时间:2024/06/06 03:04

一、目标

登陆页面,当用户没有输入的信息的使用提示错误信息。


当用户输入密码错误的时候提示错误信息。本登陆页面还是沿用之前的登陆页面(点击打开链接)进行修改,如果用户输入的信息不为 用户名:a,密码:a 则视为错误。



二、基本思想

配置好struts.xml文件,在struts.xml的Action标签下,一定要定义<result name="input">XXX.jsp</result>,同时这个XXX一般就是登陆页面login.jsp,因为验证框架出错会自动返回到input,这个返回值是struts所规定,无法进行修改。错误页面error.jsp可以不要。错误信息直接在login.jsp输出。


三、制作过程

1.先对login.jsp进行修改,为login.jsp增加错误提示。

<%@ page language="java" contentType="text/html;charset=utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><html><head><title>登陆页面</title></head><body><h3>用户登录</h3><strong><font color="red"> <s:fielderror><s:param>error</s:param></s:fielderror> </font> </strong><!--关键是在这里,跳转到action处理  --><form action="login.action" method="post"><table><tr align="center"><td>用户名:<input type="text" name="username" /></td><td><!--以下为错误信息的struts标签--><strong><font color="red"><s:fielderror><s:param>username</s:param></s:fielderror> </font> </strong></td></tr><tr align="center"><td>密码:<input type="password" name="password" /></td><td><strong><font color="red"><s:fielderror><s:param>password</s:param></s:fielderror> </font> </strong></td></tr><tr align="center"><td colspan="3"><input type="submit" value="提交" /><input type="reset" value="重置" /></td></tr></table></form></body></html>

据说不添加错误提示的Struts标签同样可以在页面显示错误信息,亲自实践,发现不可以。

上文最关键的就是<s:fielderror><s:param>username</s:param></s:fielderror>,其意思是指输出名为username的错误信息。其后的password与其前的error同理

这个错误信息可以被<strong>加粗、<font>字体等标签所修饰。


2.之后改写LoginAction.java这个动作

package com.ascent.struts2.action;import com.opensymphony.xwork2.ActionSupport;//要使用Struts的数据验证,必须继承这个类与引入这个包public class LoginAction extends ActionSupport{private String username;private String password;public String getUsername() {return username;}public String getPassword() {return password;}public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}public String execute() throws Exception{if ((getUsername().equals("a")) && (getPassword().equals("a"))) {//这里不再返回一个字段,直接返回一个类似于const常量的东西return SUCCESS;}else{this.addFieldError("error", "username or password is wrong!");return INPUT;}}public void validate(){if(this.getUsername()==null||"".equals(this.getUsername().trim())){//如果你没输入东西,或者输入一堆空格的话……就添加一个名叫username的错误信息this.addFieldError("username", "Username is required!");}if(this.getPassword()==null||"".equals(this.getPassword().trim())){this.addFieldError("password", "Password is required!");}}//这个JAVA文件会弹出警告,应为没有private static final long serialVersionUID=...;这一句,指出其修改的次数,不过不影响}

要使用数据验证功能,Action类要继承ActionSupport。Action返回值由于使用了数据验证的功能,不再是返回一个字段,而且返回一个类似与常量的东西。规定在普通的执行方法execute()中必须抛出异常,错误的情况返回INPUT。而在validate()方法中,则不需要这样做。

3.修改struts.xml文件下相应的标签

<action name="login" class="com.ascent.struts2.action.LoginAction"><result name="input">/login.jsp</result><result>/WEB-INF/welcome.jsp</result></action>


意思为:除了INPUT异常,其余都跳转到welcome.jsp。可以看到error.jsp已经完全没用了。

0 0
原创粉丝点击