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

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,名字不一样,问是否在在选中两个以后给出提示
阅读更多
想对作者说点什么? 我来说一句

软通动力面试流程

2014年02月20日 16KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭