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