2014-07-07 46 views
0

我使用Spring 4.0.3來設置我的web應用程序,我的控制器在訪問主頁時返回「main」。然而,我有時可以看到當我「主」頁面,並刷新它導致「主」頂部的「主」,爲什麼會發生?爲了更清楚,例如當前頁面是「www.sitename.com/main」,我刷新了瀏覽器,然後我得到了「www.sitename.com/mainmain」。Spring控制器返回頁面的路徑 - 相對還是絕對?

@RequestMapping(value="/main*") 
    public String getMainBoard(HttpServletRequest request, HttpServletResponse response, Model model) { 

     Person myProfile = Actions.myProfile(); 
     if(!Actions.isLogin() || myProfile == null) { 
      return "login"; 
     } 

     model.addAttribute("profileImage", myProfile.getImage().getUrl()); 
     model.addAttribute("profileDisplayName", myProfile.getDisplayName()); 
     int internalUserID = retrieveInternalUserID(myProfile.getId()); 
     List<CategoryNoneItem> categoryItems = retrieveCategoryItemsWithUserID(internalUserID); 
     model.addAttribute("categoryItems", categoryItems); 
     storeDB(myProfile); 

     return "main"; 
    } 

碼主頁,如下

<jsp:directive.page contentType="text/html; charset=UTF-8"></jsp:directive.page> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html, charset=UTF-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <meta name="description" content="" /> 
    <meta name="author" content="BL" /> 

    <title>CategoryBags</title> 

    <!--One solution for static resources solver at http://stackoverflow.com/questions/20789496/spring-access-to-static-resources 
    to use jstl c:url to generate a base --> 
    <link href="http://localhost:8080/backend/res/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> 
    <link href="http://localhost:8080/backend/res/css/bootstrap-theme.min.css" rel="stylesheet" /> 
    <link href="http://localhost:8080/backend/res/css/bootstrap-responsive.min.css" rel="stylesheet" /> 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <script type="text/javascript" src="http://localhost:8080/backend/res/js/bootstrap.min.js"></script> 
    <style type="text/css"> 
     .socials { 
     padding: 10px; 
     } 

     body { 
      padding-top: 60px; 
      padding-botton:40px; 
     } 

     .sidebar-nav { 
      padding:9px 0; 
     } 

     div.panel-heading { 
      word-wrap: break-word; 
     } 

     div.panel-body { 
      word-wrap: break-word; 
     } 
    </style> 
    <script> 
     $(document).on('hidden.bs.modal', '.modal', function() { 
      console.log('closed'); 
      $('#title').val(""); 
      $('#content').val(""); 
      $(this).find("input").val(""); 
      $(this).find("textarea").val(""); 
     }); 
    </script> 
</head> 

<body> 

<div> 
    <div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> 
     <div class="navbar-inner"> 
      <div class="container-fluid"> 
       <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </a> 
       <a class="navbar-brand pull-left" href="/">CategoryBags </a> 
       <form class="navbar-form navbar-left"> 
        <input type="text" class="search-query" placeholder="Search" /> 
       </form> 
       <ul class="nav navbar-nav navbar-right"> 
        <li class="dropdown"> 
         <a href="#" class="dropdown-toggle" data-toggle="dropdown">Help Info<b class="caret"></b></a> 
         <ul class="dropdown-menu"> 
          <li><a href="#">About us</a></li> 
          <li class="divider"></li> 
          <li><a href="#">Contact us</a></li> 
         </ul> 
        </li> 
       </ul> 

       <!-- ul class="nav navbar-nav navbar-right"> 
        <li><img th:src="${profileImage}"></img></li> 
       </ul--> 

       <ul class="nav navbar-nav navbar-right"> 
        <li><img src="https://lh6.googleusercontent.com/-4TQofbWwlp8/AAAAAAAAAAI/AAAAAAAAAgQ/ohPwyL5zD2M/photo.jpg?sz=50" /></li> 
        <li class="dropdown"> 
         <a href="#" class="dropdown-toggle" data-toggle="dropdown">Bing Lan</a> 
         <ul class="dropdown-menu"> 
          <li><a href="javascript:void(0)" onclick="logOut()">Log Out</a></li> 
         </ul> 
        </li> 
       </ul> 

      </div> 
     </div> 
    </div> 
</div> 

<div class="container-fluid"> 
    <div class="row"> 
     <div class="span4"> 
      <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#addNew" role="button"> 
       <span class="glyphicon glyphicon-plus">Add</span> 
      </button> 
      <div class="modal fade" id="addNew" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
       <div class="modal-dialog modal-lg"> 
        <div class="modal-content"> 
         <div class="modal-header"> 
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
          <h4 class="modal-title" id="myModalLabel">Record something useful for you</h4> 
         </div> 
         <div class="modal-body"> 
          <form class="form-horizontal" id="newItem" method="POST" acceptcharset="UTF-8"> 
           <div class="form-group"> 
            <label class="control-label col-md-2">Title</label> 
            <div class="col-md-8"> 
             <input type="text" class="form-control" id="title" /> 
            </div> 
           </div> 
           <div class="form-group"> 
            <label class="control-label col-md-2">Content</label> 
            <div class="col-md-8"> 
             <textarea rows="10" class="form-control" id="content"></textarea> 
            </div> 
           </div> 
           <div class="checkbox"> 
            <label> 
             <input type="checkbox">Study</input> 
            </label> 
           </div> 
           <div class="checkbox"> 
            <label> 
             <input type="checkbox">Life</input> 
            </label> 
           </div> 
           <div class="checkbox"> 
            <label> 
             <input type="checkbox">Sports</input> 
            </label> 
           </div> 
          </form> 
         </div> 
         <div class="modal-footer"> 
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
          <button type="button" class="btn btn-primary" id="NewItemModalSubmit">Save changes</button> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

<script type="text/javascript"> 
    function logOut() { 
     var currentLocation = window.location; 
     console.log('current location ', currentLocation); 
     $.ajax({ 
      type: 'POST', 
      url: 'http://localhost:8080/backend/logout', 
      contentType: 'application/octet-stream; charset=utf-8', 
      success: function(result) { 
       window.location = 'http://localhost:8080/backend/'; 
      } 
     }); 
    }; 

    function deleteCategoryNoneItem(itemID) { 
     $.ajax({ 
      type : 'POST', 
      url : 'http://localhost:8080/backend/deletecategorynoneitem', 
      contentType : 'application/octet-stream; charset=utf-8', 
      data : { 
       ID : itemID 
      }, 
      success: function(result) { 
       window.location.href = "http://localhost:8080/backend/main"; 
      } 
     }); 
    }; 

    function modifyCategoryNoneItem(itemID) { 
     console.log('enter modifyCategoryNoneItem()'); 
     console.log("title is ", $("#title" + itemID).val()); 
     $.ajax({ 
      type : 'POST', 
      url : 'http://localhost:8080/backend/modifycategorynoneitem', 
      contentType : 'application/octet-stream; charset=utf-8', 
      data : { 
       ID : itemID, 
       title: $("#title" + itemID).val(), 
       content: $("#content" + itemID).val() 
      }, 
      success: function(result) { 
       window.location.href = "http://localhost:8080/backend/main"; 
      } 
     }); 
    }; 

    $(document).ready(function() { 
     $('#NewItemModalSubmit').click(function() { 
      if($("#title").val() || $("#content").val()) 
      { 
       $.ajax({ 
        type : "POST", 
        url : "http://localhost:8080/backend/addnew", 
        contentType: 'application/octet-stream; charset=utf-8', 
        data : { 
         title: $("#title").val(), 
         content: $("#content").val() 
        }, 
        success: function(result) { 
         $("#addNew").modal('toggle'); 
         window.location.href = "http://localhost:8080/backend/main"; 
        } 
       }); 
      } 
      else 
       $("#addNew").modal('toggle'); 

     }); 

     $('#NewItemModalClose').click(function() { 
      console.log('NewItemModalClose button clicked.'); 
      console.log('title field is ', document.getElementById("title").value); 
      document.getElementById("title").innerHTML = ""; 
      console.log('title field is ', document.getElementById("title").value); 
      document.getElementById("content").innerHTML = ""; 
      $("#addNew").modal('toggle');   
     }); 
    }); 

</script> 
</body> 

</html> 
+0

'return「main」;'在現有URL的末尾添加'main'。嘗試'返回「重定向:主」「;而不是 –

回答

0

你的控制器映射@RequestMapping(value="/main*")將聽取各方GET呼叫終止於/main後跟任何文本例如/main/mainmain/mainSometext

最後,你有一個return "main"這將做什麼,但添加main現有URL的末尾,並得到一個網頁,映射到這個網址。

以你所描述的,如果當前頁面是www.sitename.com/main,刷新將導致此控制器映射的調用,並預期將在URL的末尾添加一個main給你www.sitename.com/mainmain的例子我猜測會導致404錯誤(假設你沒有頁面或控制器映射mainmain)。

在這種情況下,您應該嘗試做一個return "redirect:main";

/指定的彈簧映射從上下文路徑開始是絕對的。 e.g a @RequestMapping(value="/user/login")將映射到從上下文路徑開始的頁面,即/user/login,即htpp:// localhost:8080/user/login或http://www.example.com/user/login