public boolean isValid(final String oid, final String opwd) {
List list = (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
List result = session.createCriteria(Operator.class).add(
Restrictions.eq("oid", oid)).add(
Restrictions.eq("opwd", opwd)).list();
return result;
}
});
if (list.size() > 0) {
return true;
} else {
return false;
}
}
以上这段代码在DAO测试时没有出现问题,但在执行action.do调用DAO时出现空指针错误,请问是怎么回事?

解决方案 »

  1.   

    这是struts和spring的配置    <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          type="com.hotel.struts.action.LoginAction">
          <forward name="success" path="/welcome.jsp" />
          <forward name="failure" path="/login.jsp" />
        </action> <bean name="/login" class="com.hotel.struts.action.LoginAction">
    <property name="operatorDAO">
    <ref local="operatorDAO" />
    </property>
    </bean>请帮我看看问题出在哪?
      

  2.   

    LoginAction代码:package com.hotel.struts.action;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.log4j.Logger;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
    import org.apache.struts.action.ActionMessages;
    import org.apache.struts.actions.DispatchAction;import com.hotel.hibernate.dao.OperatorDAO;
    import com.hotel.struts.form.LoginForm;
    import com.hotel.struts.util.Constants;
    public class LoginAction extends DispatchAction { protected OperatorDAO operatorDAO = new OperatorDAO();

    Logger log = Logger.getLogger(this.getClass()); public OperatorDAO getOperatorDAO() {
    return operatorDAO ;
    } public void setOperatorDAO(OperatorDAO operatorDAO) {
    this.operatorDAO = operatorDAO;
    }
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception { ActionMessages messages = new ActionMessages();
    ActionForward forward = new ActionForward();
    LoginForm loginForm = (LoginForm) form; try {
    // get parameters
    String oid = loginForm.getOid();
    String opwd = loginForm.getOpwd(); 
    // invalidate the original session if exists
    HttpSession session = request.getSession(false);
    if (session != null) {
    session.invalidate();
    } // create a new session for the user
    session = request.getSession(true); // login
    if (operatorDAO.isValid(oid,opwd)){
    session.setAttribute(Constants.OPERATOR_KEY, oid);
    log.info("Operator " + oid + " login.");
    } else {
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
    "login.message.failed"));
    } } catch (Exception e) {
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
    "login.message.failed"));
    } // If a message is required, save the specified key(s)
    // into the request for use by the <struts:errors> tag. if (!messages.isEmpty()) {
    saveErrors(request, messages);
    request.setAttribute("loginFormBean", loginForm);
    forward = mapping.findForward(Constants.FAILURE_KEY);
    } else {
    forward = mapping.findForward(Constants.SUCCESS_KEY);
    } // Finish with
    return (forward);
    }
    }