1. 程式人生 > >驗證表單返回錯誤資訊

驗證表單返回錯誤資訊

一:利用requst返回錯誤提示

在Action類中操作requst物件(另附文介紹),然後按Servlet方式處理。具體程式碼如下: struts.xml
	<package name="user" namespace="/" extends="struts-default">
		<!-- 解決struts2.5 萬用字元呼叫無效的問題 -->
		<global-allowed-methods>regex:.*</global-allowed-methods>

		<action name="*_*" class="com.lhb.StrutsText.{1}" method="{2}">
			<result name="success">/success.jsp</result>
			<result name="input">/user_login.jsp</result>
		</action>

	</package>

Action
	private static Logger log = Logger.getLogger(User.class);
	private UserBean user = new UserBean();// 手動例項化

	@Override
	public UserBean getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	public String check() {
		HttpServletRequest request = ServletActionContext.getRequest();
		if (!"admin".equals(user.getUseName())) {
			request.setAttribute("usererror", "使用者名稱不正確");
			return INPUT;
		} else if (!"123".equals(user.getPassword())) {
			request.setAttribute("pwerror", "密碼不正確");
			return INPUT;
		}
		return SUCCESS;
	}
JSP
	<form action="./User_check.do">
		使用者名稱:<input type="text" name="useName"><span>${usererror}</span><br/>
		密碼:<input type="password" name="password"><span>${pwerror}</span><br/>
		<input type="submit" value="提交">
	</form>
訪問執行如下路徑:http://localhost:8080/StrutsText/user_login.jsp並提交資料


執行結果:

測試成功。
當然上述事例中,如果requst物件在多個類或多個地方使用,可以構建一個Action基類,利用該基類獲取requst的常用物件,實際使用的Action去繼承上述基類。程式碼修改如下:
Action基類
public class BasicAction extends ActionSupport{
	public 	HttpServletRequest request;
	public HttpServletResponse response; 
	public HttpSession session;
	public ServletContext application;
	public BasicAction() {
		// TODO Auto-generated constructor stub
		request = ServletActionContext.getRequest();
		response=ServletActionContext.getResponse(); 
		session =request.getSession();
		application=request.getServletContext();
		//.........	
	}

}
Action修改為:
public class User extends BasicAction implements ModelDriven<UserBean> {
	private static Logger log = Logger.getLogger(User.class);
	private UserBean user = new UserBean();// 手動例項化

	@Override
	public UserBean getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	public String check() {
		if (!"admin".equals(user.getUseName())) {
			this.request.setAttribute("usererror", "使用者名稱不正確");
			return INPUT;
		} else if (!"123".equals(user.getPassword())) {
			this.request.setAttribute("pwerror", "密碼不正確");
			return INPUT;
		}
		return SUCCESS;
	}

}

二:利用struts返回錯誤提示

除了上述使用request方法外,還可以使用struts返回錯誤提示,具體程式碼如下: Action修改為:
	private static Logger log = Logger.getLogger(User.class);
	private UserBean user = new UserBean();// 手動例項化

	@Override
	public UserBean getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	public String check() {
		if(!"admin".equals(user.getUseName())){
			this.addFieldError("userName", "使用者名稱不正確!");
			return INPUT;
		}else if(!"123".equals(user.getPassword())){
			this.addFieldError("passWord","密碼不正確!");
			return INPUT;
		}
		return SUCCESS;
	}
jsp程式碼修改如下: 因為需要使用struts標籤,所以需要在jsp引入struts標籤庫
 <%@ taglib prefix="s" uri="/struts-tags"%>
	<form action="./User_check.do">
		使用者名稱:<input type="text" name="useName"><br/>
		密碼:<input type="password" name="password"><br/>
		<s:fielderror>
			<s:param>userName</s:param>
			<s:param>passWord</s:param>
		</s:fielderror>
		<input type="submit" value="提交">
	</form>
訪問執行如下路徑:http://localhost:8080/StrutsText/user_login.jsp並提交資料




執行結果為:
測試成功! 因為其返回值都為系統預設返回值,可以呼叫validate方法,改進Action程式碼 Action程式碼修改如下:
	private static Logger log = Logger.getLogger(User.class);
	private UserBean user = new UserBean();// 手動例項化

	@Override
	public UserBean getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	public String check() {
		return SUCCESS;
	}

	@Override
	public void validate() {
		// TODO Auto-generated method stub
		if (!"admin".equals(user.getUseName())) {
			this.addFieldError("userName", "使用者名稱不正確!");
		} else if (!"123".equals(user.getPassword())) {
			this.addFieldError("passWord", "密碼不正確!");
		}
	}
訪問執行如下路徑:http://localhost:8080/StrutsText/user_login.jsp並提交資料

執行結果:
測試成功!