2012-09-18 137 views
0

我試圖驗證完成時,我選擇了用戶名字段,但是新的Ajax和jQuery。下是我的代碼,我可能有很多錯誤,由於在jquery新。我收到以下錯誤:SpringMvc和Ajax Restful Web服務

「NetworkError:500內部服務器錯誤 -

http://localhost:8084/crimeTrack/validateUserName.htm?userName=hello" 

的Javascript:

 $(document).ready(function(){ 
      $('#userName').blur(function(evt){ 
       CheckAvailability();      
      }); 
     });   

     function CheckAvailability() { 
      $.getJSON(
       "validateUserName.htm", 
       {userName: $('#userName').val()}, 
       function(){ 
        alert('Sorry UserName Taken'); 
      }); 
     } 

@Controller:OfficerRegistrationController

@RequestMapping(value="validateUserName.htm", method=RequestMethod.GET) 
public boolean validateUserName(@RequestParam String userName) throws Exception{ 
    if (officerdao.OfficerExist(userName)) { 
     return true; 
    } 
    return false; 
} 

的Servlet:

<bean name="/validateUserName.htm" class="com.crimetrack.web.OfficerRegistrationController"/> 

OfficerDao

public boolean OfficerExist(String userName){ 

    logger.info("About to check if officers existing"); 

    String sql = "SELECT userName FROM crimetrack.tbloffficers WHERE userName = ?"; 
    Map<String, Object> results = getJdbcTemplate().queryForMap(sql, userName); 
    String dbUserName = (String)results.get("userName"); 

    logger.info("Checking if officers exist "+sql); 

    if (dbUserName.equals(userName)) { 

     return true; 

    }else{ 

     return false; 
    }  
} 

錯誤日誌:

31693 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Bound request context to thread: [email protected] 
31693 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'crimetrack' processing GET request for [/crimeTrack/validateUserName.htm] 
31693 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Testing handler map [[email protected]18ddc48] in DispatcherServlet with name 'crimetrack' 
31693 [http-8084-1] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - No handler mapping found for [/validateUserName.htm] 
31693 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Testing handler map [or[email protected]f6852d] in DispatcherServlet with name 'crimetrack' 
31703 [http-8084-1] DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping - Mapping [/validateUserName.htm] to HandlerExecutionChain with handler [com.c[email protected]] and 1 interceptor 
31703 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Testing handler adapter [[email protected]fc606] 
31703 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Testing handler adapter [org[email protected]1966070] 
31703 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Testing handler adapter [org.springfram[email protected]1959352] 
31703 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Last-Modified value for [/crimeTrack/validateUserName.htm] is: -1 
31713 [http-8084-1] DEBUG org.springframework.web.bind.annotation.support.HandlerMethodInvoker - Invoking request handler method: public boolean com.crimetrack.web.OfficerRegistrationController.validateUserName(java.lang.String) throws java.lang.Exception 
31713 [http-8084-1] DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [[email protected]]: java.lang.NullPointerException 
31723 [http-8084-1] DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [[email protected]]: java.lang.NullPointerException 
31723 [http-8084-1] DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [[email protected]]: java.lang.NullPointerException 
31723 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Cleared thread-bound request context: [email protected] 
31723 [http-8084-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Could not complete request 
java.lang.NullPointerException 
    at com.crimetrack.web.OfficerRegistrationController.validateUserName(OfficerRegistrationController.java:125) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 
31723 [http-8084-1] DEBUG org.springframework.web.context.support.XmlWebApplicationContext - Publishing event in WebApplicationContext for namespace 'crimetrack-servlet': ServletRequestHandledEvent: url=[/crimeTrack/validateUserName.htm]; client=[127.0.0.1]; method=[GET]; servlet=[crimetrack]; session=[null]; user=[null]; time=[30ms]; status=[failed: java.lang.NullPointerException] 
31723 [http-8084-1] DEBUG org.springframework.web.context.support.XmlWebApplicationContext - Publishing event in Root WebApplicationContext: ServletRequestHandledEvent: url=[/crimeTrack/validateUserName.htm]; client=[127.0.0.1]; method=[GET]; servlet=[crimetrack]; session=[null]; user=[null]; time=[30ms]; status=[failed: java.lang.NullPointerException] 

錯誤在瀏覽器

org.springframework.web.util.NestedServletException:請求處理失敗;嵌套異常是java.lang.IllegalArgumentException:無效處理程序方法返回值:false org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet。的java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

根源

的java。 lang.IllegalArgumentException:無效的處理程序方法返回值:false org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter $ ServletHandlerMethodInvoker.g etModelAndView(AnnotationMethodHandlerAdapter.java:971) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:438) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter上。的java:424) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) org.springframework.web.servlet .FrameworkServlet.processRequest(FrameworkServlet.java:882) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 的java x.servlet.http.HttpServlet.service(HttpServlet.java:717)

+0

應該有你的服務器(Tomcat)的,如果有500個狀態返回某些錯誤消息。請在這裏發佈。 – Xaerxess

+0

我更新了問題,通過添加來自tomcat的錯誤日誌 – devdar

+0

我看到沒有找到[/validateUserName.htm]的處理程序映射,但我確實有一個映射在servlet文件 – devdar

回答

1

評論失控,因此要創建一個可以嘗試的事情的答案,並在事情發生變化時進行編輯。

我要你很可能使用了SimpleJdbcTemplate從queryForMap方法簽名

queryForMap(String sql, Object args...) 

一件事是嘗試,而不是地圖,也許嘗試只是查詢對象,因爲你知道你」呈現只是查詢用戶名。

getJdbcTemplate().queryForObject("select username...", String.class, userName) 

我還專門創建一個JUnit集成測試這個DAO其中以撞擊數據庫更容易調試是什麼原因造成的問題。有時候異常可能會被重新使用,等等,它可能會引起混淆,究竟是什麼導致了這個問題。

試試這些,讓我知道發生了什麼,可能會使事情更容易調試。

樣本JUnit的可能如下

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"path/to/app/config.xml"}) 
public class IntegrationTestOfficerDao { 
    @Autowired 
    private OfficerDao officerDao; 

    @Test 
    @Rollback(value=true) 
    @Transactional 
    public void testUserExists() 
    { 
    // This would create the user and persist it 
    OfficerUser user = createUser(...); 
    assertTrue(officerDao.OfficerExist(user.username())); 
    } 
} 
+0

這個工程很好,你可以指導我如何創建一個DAO的JUNIT測試案例 – devdar

+1

看看編輯,春季測試和junit罐子將是需要的。 – dardo