接上一篇博文:struts2入门配置
进行重构,加入验证。
要实现效果:
用户名为hello,密码为world时通过。否则,验证后进行错误提示。
- 创建一个登陆页(login2.jsp)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <title>Validate Test</title> </head> <body> <s:form action="login"> <s:textfield name="username" label="username"></s:textfield> <s:password name="password" label="password"></s:password> <s:submit label="submit"></s:submit> </s:form> </body> </html>
以上的代码中,我们用到了Struts2中常用的UI标签,表单标签:form、textfield、password、submit
- 创建Action类(LoginAction.java),继承ActionSupport
package com.test.action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { if ("hello".equals(this.getUsername().trim()) && "world".equals(this.getPassword().trim())) { return "success"; } else { this.addFieldError("username", "username or password error"); return "failer"; } } @Override public void validate() { if(null == this.getUsername() || "".equals(this.getUsername().trim())) { this.addFieldError("username", "username required"); } if (null == this.getPassword() || "".equals(this.getPassword().trim())) { this.addFieldError("password", "password required"); } } }
ActionSupport类实现了一个Validateable接口,该接口有validate()方法,如果action实现了该接口,struts2在调用execute()方法前会先调用validate方法。因此,我们可以将验证放到validate()方法中。
addFieldError(String fieldName,String errorMessage)是com.opensymphony.xwork2.ActionSupport类下的方法(实现的ValidationAware接口中的方法),给一个字段(属性)添加错误信息(errorMessage存放在一个Map中)
fieldName:字段(属性)名
errorMessage:错误信息 - struts.xml文件中配置action,添加input和failer
<struts> <package name="struts2" extends="struts-default"> <action name="login" class="com.test.action.LoginAction"> <result name="success">/result.jsp</result> <result name="input">/login2.jsp</result> <result name="failer">/login2.jsp</result> </action> </package> </struts>
- 效果
不输入用户名和密码
密码输入错误