把editInfoServiceImpl注入到EditInfoValidator类使用的时候就报jdbcTemplate空指针
editInfoServiceImpl.searchInfo();//该句报jdbcTemplate空指针把editInfoServiceImpl注入到EditInfoController类就可以正常使用
List _searchList = editInfoServiceImpl.searchInfo();//该句执行结果正确  
public abstract class BaseController extends MultiActionController {
protected BindException bindObject(HttpServletRequest request,
Object command, Validator validator) throws Exception {
ServletRequestDataBinder binder = createBinder(request, command);
binder.bind(request);
BindException errors = new BindException(command,
getCommandName(command));
if (validator.supports(command.getClass())) {
ValidationUtils.invokeValidator(validator, command, errors);
}
return errors;
}}public class EditInfoController extends BaseController {
public ModelAndView searchLogic(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 验证失败迁移的页面
final String failurePage = Config.ROOTPATH + "Jsp/EditInfo";
// 验证成功执行业务逻辑
final String successPage = Config.ROOTPATH + "Jsp/successPage";
// Check输入数据---BeanPropertyBindingResult
EditInfoStruct _editInfoStruct = new EditInfoStruct();
EditInfoValidator _editInfoValidator = new EditInfoValidator();
BindException errorModule = bindObject(request, _editInfoStruct,
_editInfoValidator); if (errorModule.hasErrors()) {
// 渲染Jsp的数据
Map errormodel = errorModule.getModel();
return new ModelAndView(failurePage, Config.PAGEVIEW, errormodel);
} else {
//为什么我在这里调用没问题?
List _searchList = editInfoServiceImpl.searchInfo();
Map _successMap = new HashMap();
_successMap.put("successList", _searchList);
// 迁移画面名称
return new ModelAndView(successPage, Config.PAGEVIEW, _successMap);
}
}
}
public class EditInfoValidator extends BaseValidator {
public boolean supports(Class clazz) {
return EditInfoStruct.class.equals(clazz);
} public void validate(Object obj, Errors errors) {
EditInfoStruct fromBean = (EditInfoStruct) obj;
String _value1 = fromBean.getValue1();
String _value2 = fromBean.getValue2(); if (_value1.equals(_value2)) {
//一样的配置我在这里调用就不行了?
editInfoServiceImpl.searchInfo();
errors.rejectValue("value1", "value1", "不能与value2相等");
}
} public EditInfoServiceImpl editInfoServiceImpl; public EditInfoServiceImpl getEditInfoServiceImpl() {
return editInfoServiceImpl;
} public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
this.editInfoServiceImpl = editInfoServiceImpl;
}}
public class EditInfoServiceImpl extends BaseDao implements EditInfoService {
// 检索Db中信息
public List searchInfo() {
return queryForList("SELECT * FROM SPRINGTEST", null);
}
}
public class BaseDao {
public BaseDao() {}
public List<Object> queryForList(String sql, Object parameter[]) {
return jdbcTemplate.queryForList(sql, parameter);
}
private JdbcTemplate jdbcTemplate;

public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}public interface EditInfoService {
  List searchInfo();
}配置文件<!--DAO基类-->
<bean id="baseDao" class="com.cn.springcomm.BaseDao"/><!--实现类-->
<bean id="editInfoServiceImpl" class="com.cn.springservice.springserviceimpl.EditInfoServiceImpl"> 
  <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>  <!--Check 类      把editInfoServiceImpl注入到EditInfoValidator类使用的时候就报jdbcTemplate空指针-->
<bean id="editInfoValidator" class="com.cn.springvalidator.EditInfoValidator">
<property name="editInfoServiceImpl">
<ref bean="editInfoServiceImpl"/>
</property>
</bean><!--控制类       把editInfoServiceImpl注入到EditInfoController类就可以正常使用-->  
<bean id="editInfoController" class="com.cn.springcontroller.EditInfoController">
<property name="editInfoServiceImpl">
<ref bean="editInfoServiceImpl"/>
</property>

<property name="methodNameResolver">
<ref bean="propertiesMethodNameResolver"/>
</property>
</bean>

解决方案 »

  1.   

    我的问题是
    把editInfoServiceImpl注入到EditInfoValidator类使用的时候就报jdbcTemplate空指针 
    editInfoServiceImpl.searchInfo();//该句报jdbcTemplate空指针 把editInfoServiceImpl注入到EditInfoController类就可以正常使用 
    List   _searchList   =   editInfoServiceImpl.searchInfo();//该句执行结果正确   
    配置文件 <!--DAO基类--> 
    <bean   id="baseDao"   class="com.cn.springcomm.BaseDao"/> <!--实现类--> 
    <bean   id="editInfoServiceImpl"   class="com.cn.springservice.springserviceimpl.EditInfoServiceImpl">   
        <property   name="jdbcTemplate"   ref="jdbcTemplate"/> 
    </bean>     <!--Check   类             把editInfoServiceImpl注入到EditInfoValidator类使用的时候就报jdbcTemplate空指针--> 
    <bean   id="editInfoValidator"   class="com.cn.springvalidator.EditInfoValidator"> 
    <property   name="editInfoServiceImpl"> 
    <ref   bean="editInfoServiceImpl"/> 
    </property> 
    </bean> <!--控制类               把editInfoServiceImpl注入到EditInfoController类就可以正常使用-->     
    <bean   id="editInfoController"   class="com.cn.springcontroller.EditInfoController"> 
    <property   name="editInfoServiceImpl"> 
    <ref   bean="editInfoServiceImpl"/> 
    </property> <property   name="methodNameResolver"> 
    <ref   bean="propertiesMethodNameResolver"/> 
    </property> 
    </bean> 
    public abstract class BaseController extends MultiActionController {
            protected BindException bindObject(HttpServletRequest request,
                Object command, Validator validator) throws Exception {
            ServletRequestDataBinder binder = createBinder(request, command);
            binder.bind(request);
            BindException errors = new BindException(command,
                    getCommandName(command));
            if (validator.supports(command.getClass())) {
                ValidationUtils.invokeValidator(validator, command, errors);
            }
            return errors;
        }}public class EditInfoController extends BaseController {
    public ModelAndView searchLogic(HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            // 验证失败迁移的页面
            final String failurePage = Config.ROOTPATH + "Jsp/EditInfo";
            // 验证成功执行业务逻辑
            final String successPage = Config.ROOTPATH + "Jsp/successPage";
            // Check输入数据---BeanPropertyBindingResult
            EditInfoStruct _editInfoStruct = new EditInfoStruct();
            EditInfoValidator _editInfoValidator = new EditInfoValidator();
            BindException errorModule = bindObject(request, _editInfoStruct,
                    _editInfoValidator);        if (errorModule.hasErrors()) {
                // 渲染Jsp的数据
                Map errormodel = errorModule.getModel();
                return new ModelAndView(failurePage, Config.PAGEVIEW, errormodel);
            } else {
                //为什么我在这里调用没问题?
                List _searchList = editInfoServiceImpl.searchInfo();
                Map _successMap = new HashMap();
                _successMap.put("successList", _searchList);
                // 迁移画面名称
                return new ModelAndView(successPage, Config.PAGEVIEW, _successMap);
            }
        }
    }
        public class EditInfoValidator extends BaseValidator {
        public boolean supports(Class clazz) {
            return EditInfoStruct.class.equals(clazz);
        }    public void validate(Object obj, Errors errors) {
            EditInfoStruct fromBean = (EditInfoStruct) obj;
            String _value1 = fromBean.getValue1();
            String _value2 = fromBean.getValue2();        if (_value1.equals(_value2)) {
                //一样的配置我在这里调用就不行了?    
                editInfoServiceImpl.searchInfo();
                errors.rejectValue("value1", "value1", "不能与value2相等");
            }
        }    public EditInfoServiceImpl editInfoServiceImpl;    public EditInfoServiceImpl getEditInfoServiceImpl() {
            return editInfoServiceImpl;
        }    public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
            this.editInfoServiceImpl = editInfoServiceImpl;
        }}
    public class EditInfoServiceImpl extends BaseDao implements EditInfoService {
        // 检索Db中信息
        public List searchInfo() {
            return queryForList("SELECT * FROM SPRINGTEST", null);
        }
    }
    public class BaseDao {
        public BaseDao() {}
        public List<Object> queryForList(String sql, Object parameter[]) {
            return jdbcTemplate.queryForList(sql, parameter);
        }
        private JdbcTemplate jdbcTemplate;
        
        public JdbcTemplate getJdbcTemplate() {
            return jdbcTemplate;
        }
        
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    }public interface EditInfoService {
          List searchInfo();
    }
      

  2.   


    public class EditInfoValidator extends BaseValidator {
        public boolean supports(Class clazz) {
            return EditInfoStruct.class.equals(clazz);
        }    public void validate(Object obj, Errors errors) {
            EditInfoStruct fromBean = (EditInfoStruct) obj;
            String _value1 = fromBean.getValue1();
            String _value2 = fromBean.getValue2();        if (_value1.equals(_value2)) {
                //一样的配置我在这里调用就不行了?    
                editInfoServiceImpl.searchInfo();
                errors.rejectValue("value1", "value1", "不能与value2相等");
            }
        }    public EditInfoServiceImpl editInfoServiceImpl;//你把这句放到最前面,类的下面.    public EditInfoServiceImpl getEditInfoServiceImpl() {
            return editInfoServiceImpl;
        }    public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
            this.editInfoServiceImpl = editInfoServiceImpl;
        }}还有你最好是把错误上下文贴出来
      

  3.   

    EditInfoController 类中有editInfoServiceImpl他相关的get或set方法吗?
    List   _searchList   =   editInfoServiceImpl.searchInfo(); //editInfoServiceImpl有它的get和set方法吗
      

  4.   


    xml配置文件<!--DAO基类-->
    <bean id="baseDao" class="com.cn.springcomm.BaseDao"/><!--实现类-->
    <bean id="editInfoServiceImpl" class="com.cn.springservice.springserviceimpl.EditInfoServiceImpl"> 
       <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>  <!--Check 类-->
    <bean id="editInfoValidator" class="com.cn.springvalidator.EditInfoValidator">
    <property name="editInfoServiceImpl">
    <ref bean="editInfoServiceImpl"/>
    </property>
    </bean><!--控制类-->  
    <bean id="editInfoController" class="com.cn.springcontroller.EditInfoController">
            <property name="editInfoServiceImpl">
    <ref bean="editInfoServiceImpl"/>
    </property>

    <property name="methodNameResolver">
    <ref bean="propertiesMethodNameResolver"/>
    </property>
    </bean>public abstract class BaseValidator implements Validator {
    public abstract boolean supports(Class clazz) ;
    }public class EditInfoValidator extends BaseValidator {
    public boolean supports(Class clazz) {
    return EditInfoStruct.class.equals(clazz);
    } public void validate(Object obj, Errors errors) {
    System.out.println("validate............");
    EditInfoStruct fromBean = (EditInfoStruct) obj;
    String _value1 = fromBean.getValue1();
    String _value2 = fromBean.getValue2(); System.out.println(_value1);
    System.out.println(_value2); if (_value1.equals(_value2)) {
    //错误26句
    editInfoServiceImpl.searchInfo();
    errors.rejectValue("value1", "value1", "不能与value2相等");
    }
    }
    public EditInfoServiceImpl editInfoServiceImpl; public EditInfoServiceImpl getEditInfoServiceImpl() {
    return editInfoServiceImpl;
    } public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
    this.editInfoServiceImpl = editInfoServiceImpl;
    }}
    public abstract class BaseController extends MultiActionController {

    }public class EditInfoController extends BaseController {
    public ModelAndView searchLogic(HttpServletRequest request,
    HttpServletResponse response) throws Exception {
    System.out.println("EditInfoController.searchLogic");
    // 验证失败迁移的页面
    final String failurePage = Config.ROOTPATH + "Jsp/EditInfo";
    // 验证成功执行业务逻辑
    final String successPage = Config.ROOTPATH + "Jsp/successPage";
    // Check输入数据---BeanPropertyBindingResult
    EditInfoStruct _editInfoStruct = new EditInfoStruct();
    EditInfoValidator _editInfoValidator = new EditInfoValidator();

    BindException errorModule = bindObject(request, _editInfoStruct,
    _editInfoValidator);

    if (errorModule.hasErrors()) {
    // 渲染Jsp的数据
    Map errormodel = errorModule.getModel();
    return new ModelAndView(failurePage, Config.PAGEVIEW, errormodel);
    } else {
    //这里就可以
    List _searchList = editInfoServiceImpl.searchInfo();
    Map _successMap = new HashMap();
    _successMap.put("successList", _searchList);
    // 迁移画面名称
    return new ModelAndView(successPage, Config.PAGEVIEW, _successMap);
    }
    }
    }
    public class EditInfoDao extends BaseDao{
    public List searchInfo() {
    return queryForList("SELECT * FROM SPRINGTEST", null);
    }
    }
    public class BaseDao { public BaseDao() {} public List<Object> queryForList(String sql, Object parameter[]) {
    System.out.println(this.jdbcTemplate == null);
    List<Object> list = jdbcTemplate.queryForList(sql, parameter);
    return list;
    } private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() {
    return jdbcTemplate;
    } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
    }}----
    //这里就可以
    List _searchList = editInfoServiceImpl.searchInfo();
           //为什么这里就不行
    editInfoServiceImpl.searchInfo();
    //EditInfoValidator 错误26句
    editInfoServiceImpl.searchInfo();
    //EditInfoController 40句
    BindException errorModule = bindObject(request, _editInfoStruct,_editInfoValidator);
    错误信息
    validate............
    a
    a
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    Caused by: java.lang.NullPointerException
    at com.cn.springvalidator.EditInfoValidator.validate(EditInfoValidator.java:26)
    at org.springframework.validation.ValidationUtils.invokeValidator(ValidationUtils.java:63)
    at com.cn.springcomm.BaseController.bindObject(BaseController.java:45)
    at com.cn.springcontroller.EditInfoController.searchLogic(EditInfoController.java:40)



      

  5.   

    public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
            this.editInfoServiceImpl = editInfoServiceImpl;
    }
    这个方法我看见了,但其中的this.editInfoServiceImpl 在什么地方声明的似乎没发现。
      

  6.   

    你代码贴的不完整吧.建议你在下面这个地方设个断点,看看有没有设值.应该是没有初始化的原因.
    public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
      

  7.   

    代码完整啊!!!我上面都是一样的配置啊这两个配置都一样啊为什么一个可以一个不行呢把editInfoServiceImpl注入到EditInfoValidator类使用的时候就报jdbcTemplate空指针 
    editInfoServiceImpl.searchInfo();//该句报jdbcTemplate空指针 把editInfoServiceImpl注入到EditInfoController类就可以正常使用 
    List   _searchList   =   editInfoServiceImpl.searchInfo();//该句执行结果正确     
      

  8.   

    检查一下你的Validator 是不是实现错了,然后检查一下下面继承下来的注入属性