一、目标
登陆页面,当用户没有输入的信息的使用提示错误信息。
当用户输入密码错误的时候提示错误信息。本登陆页面还是沿用之前的登陆页面(点击打开链接)进行修改,如果用户输入的信息不为 用户名: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已经完全没用了。