一,使用Struts2标签库简化表单
在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp
1 <%@ page language="java" pageEncoding="utf-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags" %> 3 4 <html> 5 6 <body> 7 <center> 8 <h3>用户登录</h3> 9 <%-- 登录表单,提交到login.action --%> 10 <s:form action="userlogin"> 11 <%--用户名输入框--%> 12 <s:textfield name="username" label="用户名"></s:textfield> 13 <%--用户密码输入框--%> 14 <s:password name="userpwd" label="密码"></s:password> 15 <%--登录按钮--%> 16 <s:submit value="登录"></s:submit> 17 <%--重置按钮--%> 18 <s:reset value="重置"></s:reset> 19 </s:form> 20 </center> 21 </body> 22 </html>
浏览器效果:
二,继承ActionSupport完成输入校验
ActionSupport类已经实现了Action接口和Validatable等接口,可以通过继承ActionSupport类简化Action开发。
Validatable接口中仅仅定义了一个validata()方法,通过重写该方法,可以非常方便地实现交验功能。如在该方法中
添加对用户输入的参数信息进行判断,如果用户名为空,密码为空等。如果要输出错误提示信息,则只需要调用ActionSupport类中
的addFieldErrors方法来添加相应的错误提示信息。
1 package com.mhb.action; 2 3 import com.mhb.model.LoginCheck; 4 import com.opensymphony.xwork2.ActionSupport; 5 6 //控制类Action 7 8 public class LoginAction2 extends ActionSupport { 9 10 private String username; 11 private String userpwd; 12 13 public String getUsername() { 14 return username; 15 } 16 public void setUsername(String username) { 17 this.username = username; 18 } 19 public String getUserpwd() { 20 return userpwd; 21 } 22 public void setUserpwd(String userpwd) { 23 this.userpwd = userpwd; 24 } 25 26 public String execute(){ 27 //new 一个LoginCheck对象 28 LoginCheck lc = new LoginCheck(); 29 //调用业务逻辑组件的判断功能来判断 30 if(lc.UserLoginCheck(username, userpwd)){ 31 return "success"; 32 }else{ 33 return "failure"; 34 } 35 } 36 37 //执行输入校验 38 public void validate(){ 39 //如果 用户名为空,或为null那么提示错误信息。 40 if(this.getUsername() == null || this.getUsername().equals("")){ 41 this.addFieldError("username", "用户名不能为空!"); 42 } 43 44 if(this.getUserpwd() == null || this.getUserpwd().equals("")){ 45 this.addFieldError("userpwd", "用户密码不能为空"); 46 } 47 } 48 }
如果交验失败,需要将页面跳转到input所对应的视图资源页面中,所以必须在struts.xml中配置input逻辑视图
对应的视图资源为login2.jsp,表示校验失败后将跳转回登录页面,其中struts.xml文件中配置代码如下。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <package name="mypack" extends="struts-default"> 7 <action name="first"> 8 <result>first.jsp</result> 9 </action> 10 </package> 11 12 <!-- Action必须放在指定的包空间中 --> 13 <package name="struts2" extends="struts-default"> 14 <!-- 定义login的action,其实现类为com.mhb.action.LoginAction --> 15 <action name="userlogin" class="com.mhb.action.LoginAction2"> 16 <!-- 定义处理结果与视图资源之间的关系 --> 17 <result name="success">/login_success.jsp</result> 18 <result name="failure">/login_failure.jsp</result> 19 <result name="input">/login2.jsp</result> 20 </action> 21 </package> 22 </struts>
浏览器效果:不输入用户名和密码直接提交