您的位置:首页 > 职场人生

在北京软通动力面试的时候难倒我的三个题目

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,名字不一样,问是否在在选中两个以后给出提示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: