论坛首页 入门技术论坛

struts1.2验证框架续

浏览 2332 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-09-20   最后修改:2009-09-21
struts 验证
代码级验证:ActionForm, ActionErrors validate(),
1, new ActionErrors
2, 进行验证
3, errors.add("xx",new ActionMessage(xxx))
4, saveErrors(request, errors);
saveMessages(request, errors);
<html:messages message="true|false/*取错误还是消息*/" id property />

框架验证:1,资源文件,里面有错误消息
2,validation.xml / validator-rules.xml
DTD是从validator-rules.xml拷过来的.
3,ActionForm基类
ValidatorForm, validatorActionForm,DynaValidatorForm,DynaValidatorActionForm.
凡是加了action的,那么在validation.xml中的form的name为action的path,否
则是action的name.
4,去掉validate()
5,action配置里保证validate是true
6,struts-config.xml中加<Plug-in>
validation.xml配置:
<form-set>
  <form name="action.name|action.path">
    <field property="xx/a[1]" depends="">
      <arg name="哪一个验证规则,不写对所有的验证规则" key="" resource="true|false" />
      <msg name="哪一个验证规则,不写对所有的验证规则" key="" resource="true|false" />
      <var>
	<var-name>minlength,maxlength,mask,validwhen(*this*==123,"123",password)->test,intRange->min/max,required,email />
	<var-value>
    </field>
  </form>
  <form>
  </form>
</form-set>
自定义验证规则,修改validator-rules.xml
classname=""
method=""
public static boolean validateXXX(Object bean,Field field,...
类Resources.getActionMessage(...
----------------------------------------------------------------------------
DispatchAction(分发Action)
public class CompulateAction extends DispatchAction {
  // 分发类Action是不写execute方法的.
  // DispatchAction的对应关系:页面表单里有隐藏表单域name为a
  // 在struts-config.xml中的对应的action的配置段中其parameter也为a.
  // 页面提交时, 其隐藏表单域a的值就对应方法名.
  public ActionForward add(ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response
		throws Exception {
    return null;
  }
}
---------------
LookupDispatchAction

// LookupDispatchAction
// 需要用到资源文件做桥梁, 来完成页面的提交按钮和方法名之间的对应关系.
// 在struts-config.xml中把对应的action的配置段中其parameter值为提交按钮的名字.
ApplicationResource.properties:
label.add=+
label.sub=-
label.multi=*
label.div=/

页面(必须要用struts标签):
<html:submit property="method">
  <bean:message key="label.add" />
</html:submit>


protected Map getKeyMethodMap() {
  Map rtn = new HashMap();
  rtn.put("label.add", "add");
  rtn.put("label.sub", "sub");
  rtn.put("label.multi", "multi");
  rtn.put("label.div", "div");
  return rtn;
}
----------------
// MappingDispatchAction和DispatchAction的代码是完全一致的
// 不同的方法可能对应不同的Form和Forward
// 思路:在struts-config.xml中分为逻辑上独立的一些Action.
// 此时action配置段中的其parameter值就是方法名.
// 可以对不同的方法做不同的验证.
// 对于验证框架, 这是最优先的选择.
-------------------
EventDispatchAction

<action .. parameter="save,back,recalc=recalculate.default=save"/>

public DynaBean getUserById(Integer id) {

  LazyDynaBean rtn = new LazyDynaBean();
  List<User> userList = dao.findByProperty("userId", id);
  if(userList!=null && userList.size()>0) {
    rtn.set("userId", userList.get(0).getUserId());
  }
}

// 我们欺骗一下struts
DynaBean rtn = service.getUserByid();
request.setAttribute("userForm" rtn);
------------------------------------------------
如何做DispatchAction验证
MyFieldChecks类:
修改ActionServlet和init方法.







论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics