(2)ACTION改善 实现Action接口
Action包含五个常量和一个execute()方法 五个常量:SUCCESS “success”
NONE “none” LOGIN “login”
ERROR INPUT
“error” “input”
ACTION进一步改进改善 继承ActionSupport (实现了很多接口 Action 验证接口 国际化文本act)
一般要重写execute()方法 其他方法选择使用
Struts2框架 每次都会构造一个新的action 使用的是prototype的方式 如果action累继承了ActionSupport重写了validate()方法 会先执行validate方法 在执行execute方法 重写validate方法 实现验证(non-Javadoc)
* @see com.opensymphony.xwork2.ActionSupport#validate() 如果验证方法中添加了错误信息,就不会执行execute方法
会自动返回“input” 去配置中查找result name=input 如果成功,就会执行execute()方法
Action如何访问servlet api
<1>使用ActionContext <2>实现接口 <3>使用ServletActionContext
《1》使用ActionContext上下文对象
每个action实例,都会具有一个Action上下文对象
ActionContext context = ActionContext.getContext();
Map session = context.getsession();该Map类型的对象等价于Servlet中的的HttpSession;
Session.put(“nameserror”,“用户名不能为空”);等价于HttpSession对象中的setAttribute(“逻辑名”,值);
Map application = context.getApplication();该Map对象等价于Servlet中的ServletContext getApplivation
Context.put(“nameerror”,“用户名不能为空request范围”)
《2》1.直接使用Servlet API(一) 实现接口 比较麻烦 得需要实现接口
例如:public class RegistAction4 extends ActionSupport implements ServletRequestAware,ServletResponseAware
this.request.setAttribute(\用户名不能为空request\
request.getSession().setAttribute(\用户名不能为空session\
//该方法是实现接口的抽象方法 会自动执行 执行一定在execute方法之前 @Override public void setServletRequest(HttpServletRequest request) { //完成成员变量初始化 this.request = request; }
@Override
public void setServletResponse(HttpServletResponse response) { }
2.直接使用Servlet API(二) 不需要实现接口 使用SrevletActionContext 提供静态的 获取servlet api的方法
HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); ServletContext application = ServletActionContext.getServletContext(); HttpSession session = request.getSession();
Action Model Driven 模型驱动
* 使用模型驱动 需要使用ModelDriven拦截器 该拦截器默认会引用 * 步骤:
* 让Action类实现ModelDriven接口 * 实现抽象方法public Object getModel()
* 可以直接将参数抓取后封装为一个bean模型对象
Struts2框架可以将表单参数直接抓取,并封装在一个bean对象中,并将 该对象放在栈的顶端。 Interceptor
,必须使用modelDriven拦截器,该拦截器已经在默认
拦截器栈defaultStack中引用,所以默认的action都可以使用该模型驱动模式。 使用方式
Action类实现接口ModelDriven ,实现方法Object getModel() ,返回的对象就是封装好表单参数的对象,所以要有封装表单参数对应的javaBean类。
具体参考帮助文档
Struts2校验
客户端校验和服务器端校验
客户端:页面校验 例如JavaScript 服务器端:业务校验代码 validate验证
使用validate方法验证数据
ActionSupport类实现了一个Validateable接口。这个接口只有一个validate方法。 如果Action类重写了validate()方法,Struts2在调用execute方法之前首先会调用这个方法,
如果发生错误,可以根据错误的level选择字段级错误,还是动作级错误。并且可使用 addFieldError或addActionError(很少用)加入相应的错误信息,如果存在Action或Field错误,
Struts2会返回“input”(这个并不用开发人员写,由Struts2自动返回),如果返回了“input”,
Struts2就不会再调用execute方法了。如果不存在错误信息,Struts2在最后会调用execute方
法。
使用validate方法验证数据
1.注册页面 register.jsp
相关推荐: