把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>
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>
把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();
}
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;
}}还有你最好是把错误上下文贴出来
List _searchList = editInfoServiceImpl.searchInfo(); //editInfoServiceImpl有它的get和set方法吗
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)
this.editInfoServiceImpl = editInfoServiceImpl;
}
这个方法我看见了,但其中的this.editInfoServiceImpl 在什么地方声明的似乎没发现。
public void setEditInfoServiceImpl(EditInfoServiceImpl editInfoServiceImpl) {
editInfoServiceImpl.searchInfo();//该句报jdbcTemplate空指针 把editInfoServiceImpl注入到EditInfoController类就可以正常使用
List _searchList = editInfoServiceImpl.searchInfo();//该句执行结果正确