驗證表單返回錯誤資訊
阿新 • • 發佈:2019-02-13
一:利用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
JSPprivate 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; }
<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並提交資料
執行結果:
測試成功!