现在的位置: 首页 > 综合 > 正文

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

2018年01月23日 ⁄ 综合 ⁄ 共 2766字 ⁄ 字号 评论关闭

一、目标

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

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

抱歉!评论已关闭.