在北京软通动力面试的时候难倒我的三个题目
2006-07-12 11:23
381 查看
1:如何针对dispatchAction中method的不同使用不同的验证方法
现在已经找到答案:发现这个validation.xml中的内容都读到ValidatorResource这个类的一个实例中了,在验证时从这个类的实例查找相应的formbean,例如我在<form name=”registerForm”>的话,它在ValidatorPlugIn的init()方法(被ActionServlet的init()调用)时会把name=registerForm保存在ValidatorPlugIn的一个ValidatorResource的变量里。如果客户请求一个action,当然会生成一个ActionForm(或是已存在的),如果这个ActionForm的逻辑名是registerForm,并且这个ActionForm的父类的validate()被调用(这个ActionForm没有validate()方法,或者在validate()方法中通过super.validate()),那么ValidatorForm会通过这个ValidatorResource找到要验证的ActionForm的逻辑名,而ValidatorActionForm则先通过path找到一个Action,再通过action mapping的name属性找到要验证的ActionForm。
因此我用<form name="/registerAction?method=AddUser">,则它自然找不到一个action的path是/registerAction?method=AddUser,因此没有任何验证。看来这么是不行的。
那有没有别的办法呢?DispatchAction能根据不同的参数选择不同的方法,那就应该能根据不同的参数选择不同的验证。因此我只要重写validate方法,如果参数是viewUser就不验证(return null),否则调用父类的validate()。不过用这种方法有一个问题,那就是不能使用动态的ActionForm,即DynaValidatorForm,因为它根本没有这个类,不可能写validate()方法。
public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {
/**@todo: finish this method, this is just the skeleton.*/
String parameter=actionMapping.getParameter();
String paramValue=httpServletRequest.getParameter(parameter);
System.out.println("from actionmapping "+paramValue);
parameter=httpServletRequest.getParameter("method");
System.out.println("from request "+parameter);
if(paramValue.equals("ViewUser")){
return null;
}
ActionErrors errors=super.validate(actionMapping,httpServletRequest);
return errors;
}
2: 文本框里边的文字,随便选中,点下,选中的文字就可以加上连结。
3:form中有个div,div里边有8个checkBox,名字不一样,问是否在在选中两个以后给出提示
现在已经找到答案:发现这个validation.xml中的内容都读到ValidatorResource这个类的一个实例中了,在验证时从这个类的实例查找相应的formbean,例如我在<form name=”registerForm”>的话,它在ValidatorPlugIn的init()方法(被ActionServlet的init()调用)时会把name=registerForm保存在ValidatorPlugIn的一个ValidatorResource的变量里。如果客户请求一个action,当然会生成一个ActionForm(或是已存在的),如果这个ActionForm的逻辑名是registerForm,并且这个ActionForm的父类的validate()被调用(这个ActionForm没有validate()方法,或者在validate()方法中通过super.validate()),那么ValidatorForm会通过这个ValidatorResource找到要验证的ActionForm的逻辑名,而ValidatorActionForm则先通过path找到一个Action,再通过action mapping的name属性找到要验证的ActionForm。
因此我用<form name="/registerAction?method=AddUser">,则它自然找不到一个action的path是/registerAction?method=AddUser,因此没有任何验证。看来这么是不行的。
那有没有别的办法呢?DispatchAction能根据不同的参数选择不同的方法,那就应该能根据不同的参数选择不同的验证。因此我只要重写validate方法,如果参数是viewUser就不验证(return null),否则调用父类的validate()。不过用这种方法有一个问题,那就是不能使用动态的ActionForm,即DynaValidatorForm,因为它根本没有这个类,不可能写validate()方法。
public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {
/**@todo: finish this method, this is just the skeleton.*/
String parameter=actionMapping.getParameter();
String paramValue=httpServletRequest.getParameter(parameter);
System.out.println("from actionmapping "+paramValue);
parameter=httpServletRequest.getParameter("method");
System.out.println("from request "+parameter);
if(paramValue.equals("ViewUser")){
return null;
}
ActionErrors errors=super.validate(actionMapping,httpServletRequest);
return errors;
}
2: 文本框里边的文字,随便选中,点下,选中的文字就可以加上连结。
3:form中有个div,div里边有8个checkBox,名字不一样,问是否在在选中两个以后给出提示
相关文章推荐
- 我到IBM面试的题目,难倒我了
- 软件测试工程师面试的时候可能被提到的问题
- android面试题目
- C/C++ 笔试面试题目
- 后台开发高频面试题目
- C/C++ 笔试、面试题目大汇总
- 两道面试题目
- 2017年最新PHP经典面试题目汇总(上篇)
- 面试遇到sql题目(二)
- 【Android进阶】Android面试题目整理与讲解
- 轻松搞定面试中的二叉树题目
- 163笔试资源及面试题目总结
- C/C++ 笔试、面试题目大汇总-1
- php面试题目笔试
- 实习生面试题目
- 腾讯面试题目
- 面试算法题目
- 查漏补缺2(面试小题目)
- 面试十大必考题目!(转)
- 【Java面试知识点】各大公司Java面试题目汇总-Java基础知识