onblur事件触发的用户名唯一性检查
为什么我访问这个register.jsp页面时出错,提示说Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /register.jsp(9,0) The value for the useBean class attribute com.gjun.bo.AjaxBean is invalid.
可是AjaxBean就放在 com.gjun.bo下呀!<!-- 在register.jsp中的代码:  --><jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge"/><jsp:useBean id="ajax" class="com.gjun.bo.AjaxBean"/>
<%
JSONRPCBridge.registerObject("ajax",ajax);
%><!--   -->
<script language = "JavaScript" src = "js/Gjun.js"></script>
<script type="text/javascript"  src="js/jsonrpc.js"></script>
<script language = "JavaScript">
jsonrpc=new JSONRpcClient("JSON-RPC");
function checkLoginName(){    
   var name=document.all.username.value;
   if((name!=null)&&(name.length>0)&(jsonrpc.ajax.chkLoginName(name))){
    alert('对不起,该登录帐号已被占用,请重新输入!!');
    document.all.username.focus();
   }
}

</script>
<input maxLength="8" size="32" name="username"  onblur="checkLoginName()" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
/////////////////在AjaxBean中,这里应该没错的吧?????public class AjaxBean {
private IUserDao userDao;
public static Logger logger = Logger.getLogger(AjaxBean.class);
public AjaxBean(IUserDao userDao){
this.userDao=userDao;
} public boolean chkLoginName(String loginName){

boolean result = false;
try{
// 存在该用户名,则返回true;
result = userDao.checkUser(loginName);
}catch(Exception ex){
logger.info("在执行AjaxBean类中的chkLoginName方法时出错:\n");
ex.printStackTrace();
}
return result;
}
}<!--在applictionContext.xml中-->
   <!--好像不能用getter/setter注入 -->
    <bean id="ajax" class="com.gjun.bo.AjaxBean">
    <constructor-arg>
     <ref bean="userDao"/>
    </constructor-arg>    
    </bean>

解决方案 »

  1.   

       constructor-arg 干嘛的
      

  2.   

    这是通过构造子方法的形式注入DAO
      

  3.   

    我现在发现这是由Spring 的依赖注入导致的问题
    依赖注入的问题:
    public class AjaxBean {
     public static Logger logger = Logger.getLogger(AjaxBean.class);
        private IUserService userS;
     public IUserService getUserS() {
      return userS;
     }
     public void setUserS(IUserService userS) {
      this.userS = userS;
     }
     public boolean chkLoginName(String loginName){
    //  IUserService userS=new UserServiceImpl(); 
      boolean result = false;
      try{     
    //   存在该用户名,则返回true;
    ////////////////////////////////////////////////
     result = userS.checkUser(loginName);/////////在这里出错!!!!!
    ////////////////////////////////////////////////
      }catch(Exception ex){
         logger.info("在执行AjaxBean类中的chkLoginName方法时出错:\n");
      ex.printStackTrace();   
      }
      return result;
     } 
    }问题(1)::::
        在applictionContext.xml中的设置为:
       <bean id="myAjax" class="com.gjun.bo.AjaxBean">
         <property name="userS">
     <ref bean="userS"/>
         </property>    
       </bean>
      <bean id="userS"  class="com.gjun.bo.UserServiceImpl">
        <property name="userDao">
     <ref bean="userDao"/>
        </property>   
      </bean>
     在AjaxBean、UserServiceImpl中实现了相应的getter/setter
    当JSON-RPC在JSP中调用AjaxBean时出现了java.lang.NullPointerException也就是说userS==null;如果直接将userDao注入到AjaxBean中也是一样的。在XML中去掉<bean id="userS">  在AjaxBean中直接创建一个业务对像:IUserService userS=new UserServiceImpl();userDao也会也会为null;
    问题(2)::::
        在XML中去掉<bean id="userS">  在AjaxBean中直接创建一个业务对像:IUserService userS=new UserServiceImpl();
         在applictionContext.xml中的设置为:   
        
      <bean id="userS"  class="com.gjun.bo.UserServiceImpl">
      <constructor-arg>
         <ref bean="userS"/>
        </constructor-arg> 
      </bean>
     在UserServiceImpl中
      public UserServiceImpl(IUserDao userDao){
         this.userDao=userDao;
         }
     在AjaxBean中直接创建一个业务对像:IUserService userS=new UserServiceImpl();
     AjaxBean 直接给出错误提示The constructor UserServiceImpl() is undefined
     给AjaxBean加上public UserServiceImpl(){
          
         }运行后还是NullPointerException;这样看来好像是AjaxBean不支持这样的注入方式;怎样才能给AjaxBean注入BO或DAO????是AjaxBean要实现某个接口或继承某个类吗????