一:利用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并提交数据
运行结果:
测试成功!