2014-01-13 139 views
2

我想用Jquery運行Spring MVC,但是我遇到了一些奇怪的問題。每當應用程序啓動時,它將轉到添加用戶頁面。它用於添加用戶,而那段時間jquery沒有加載。如果我點擊顯示用戶頁面,然後回到使用eclipse瀏覽器中的後退按鈕添加用戶頁面,我在添加用戶頁面中的鏈接添加到顯示用戶頁面。然後jquery工作正常。任何人可以請爲什麼它不是在第一次工作,然後它是在訪問顯示用戶頁面後工作?然後,它不工作在任何瀏覽器給jQuery 404異常,在eclipse內只有它正在工作。我已經提供了下面的代碼。提前致謝。Spring MVC問題JQuery

package com.raistudies.controller; 

import java.util.ArrayList; 
import java.util.List; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.raistudies.domain.User; 

@Controller 
public class UserListController { 

    private List<User> userList = new ArrayList<User>(); 

    @RequestMapping(value="/AddUser.htm", method = RequestMethod.GET) 
    public String showForm() { 
     return "AddUser"; 
    } 

    @RequestMapping(value = "/AddUser.htm", method = RequestMethod.POST) 
    public @ResponseBody 
    String addUser(@ModelAttribute(value = "user") User user, 
      BindingResult result) { 
     System.out.println(" add user controller..."); 
     String str = ""; 

     System.out.println(" User " + user.getName()); 
     System.out.println(" User " + user.getEducation()); 
     if (!result.hasErrors()) { 
      userList.add(user); 
      str = "User has been added to the list, total number of users are " 
        + userList.size(); 
     } else { 
      str = "Sorry, an error has occur. User has not been added to list." + result.getAllErrors(); 
     } 
     System.out.println(" add user controller ends..."); 
     return str; 
    } 

    @RequestMapping(value = "/showUsers.htm") 
    public String showUsers(ModelMap model) { 
     model.addAttribute("Users", userList); 
     return "ShowUsers"; 
    } 
} 


package com.raistudies.domain; 

public class User { 

    private String name; 
    private String education; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getEducation() { 
     return education; 
    } 

    public void setEducation(String education) { 
     this.education = education; 
    } 
} 


under the WebContent i have a folder js - inside that i have jquery.js file. 

under the WebContent i have WEB-INF folder, it has jsp and lib folder. 

under jsp folder 


AddUser.jsp 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 

<html> 
<head> 
<title>Add Users using ajax</title> 
<script src="/AjaxWithSpringMVC2Annotation/js/jquery.js"></script> 
<script type="text/javascript"> 
    function doAjaxPost() { 
     // get the form values 
     alert('doAjaxPost'); 
     var name = $('#name').val(); 
     alert('name'); 
     var education = $('#education').val(); 

     $.ajax({ 
      type : "POST", 
      url : "/AjaxWithSpringMVC2Annotation/AddUser.htm", 
      data : "name=" + name + "&education=" + education, 
      success : function(response) { 
       // we have the response 
       $('#info').html(response); 
       $('#name').val(''); 
       $('#education').val(''); 
      }, 
      error : function(e) { 
       alert('Error: ' + e); 
      } 
     }); 
    } 
</script> 
</head> 
<body> 
    <h1>Add Users using Ajax ........</h1> 
    <table> 
     <tr> 
      <td>Enter your name :</td> 
      <td><input type="text" id="name" name="name"><br /></td> 
     </tr> 
     <tr> 
      <td>Education :</td> 
      <td><input type="text" id="education"><br /></td> 
     </tr> 
     <tr> 
      <td colspan="2"><input type="button" value="Add Users" 
       onclick="doAjaxPost()"><br /></td> 
     </tr> 
     <tr> 
      <td colspan="2"><div id="info" style="color: green;"></div></td> 
     </tr> 
    </table> 
    <a href="/AjaxWithSpringMVC2Annotation/showUsers.htm">Show All 
     Users</a> 
</body> 
</html> 

ShowUser.jsp 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Users Added using Ajax</title> 
</head> 
<body style="color: green;"> 
    The following are the users added in the list : 
    <br> 
    <ul> 
     <c:forEach items="${Users}" var="user"> 
      <li>Name: <c:out value="${user.name}" />; Education: <c:out 
        value="${user.education}" /></li> 
     </c:forEach> 
    </ul> 
</body> 
</html> 

under WEB-INF 
app-config.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.0.xsd 
          http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="com.raistudies" /> 

    <mvc:annotation-driven /> 

    <!-- <mvc:resources location="/, classpath:/META-INF/web-resources/" 
     mapping="/resources/**" /> 

    <mvc:resources mapping="/resources/**" location="/public-resources/" /> 
--> 
    <!-- <mvc:resources mapping="/js/**" location="/js/"/> --> 

    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

web.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>AjaxWithSpringMVC2Annotation</display-name> 

    <servlet> 
     <servlet-name>SpringMVCDispatcherServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/app-config.xml</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>SpringMVCDispatcherServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

under WEB-CONTENT 
index.jsp 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<jsp:forward page="/AddUser.htm" /> 
+0

當你說'jquery工作正常',你是說你可以使用後退按鈕後添加用戶嗎? – andyb

+0

是的。我可以添加用戶。 – user2724215

+0

聽起來像Eclipse已經以某種方式緩存它。使用Maven命令行而不是Eclipse我無法使AddUser頁面工作,因爲從未找到「jquery.js」。我必須更改webapp配置才能使其工作。我看不到如何訪問另一個頁面,然後返回使突然工作的路徑。 – andyb

回答

1

我無法複製您描述的場景。我的本地設置中永遠找不到jquery.js文件。由於您使用的Spring配置不公開靜態資源,因此我無法看到更改頁面是如何神奇地使文件變爲可路由的。

如果您使用的是Tomcat或Jetty(或其他可能的Web容器),那麼就可以使用路由靜態資源的「默認」的servlet - 見How to access static resources when mapping a global front controller servlet on /*

添加以下內容網絡。 XML

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/js/*</url-pattern> 
</servlet-mapping> 

允許jquery.js被發現。

或者在APP-config.xml中

<mvc:resources mapping="/js/**" location="js/"/> 

它使用了Spring通過ResourceHttpRequestHandler揭露資源在取消這條線 - 見Configuring Serving of Resources

其中任何一個解決了我的404