2013-08-02 62 views
1

爲什麼我的「重定向」(即return "redirect:/myPage")不起作用?爲什麼「重定向」(即`return「redirect:/ myPage」`)對我的Tiles頁面定義不起作用?

注意:「myPage」是一個Tiles頁面定義。

(FWIW,解決我有一個「雙提交」問題是使用重定向到「我的空間」,但是我無法獲得「重定向」的工作。)

到目前爲止,我試過以下。

return new ModelAndView("redirect:/myPage")) 
return new ModelAndView("redirect:/myPage.jsp")) 

return new ModelAndView("redirect:/views/myPage")) 
return new ModelAndView("redirect:/views/myPage.jsp")) 

return new ModelAndView(new RedirectView("myPage")) 
return new ModelAndView(new RedirectView("myPage.jsp")) 

return new ModelAndView(new RedirectView("/views/myPage")) 
return new ModelAndView(new RedirectView("/views/myPage.jsp")) 

return new ModelAndView(new RedirectView("/WEB-INF/views/myPage")) 
return new ModelAndView(new RedirectView("/WEB-INF/views/myPage.jsp")) 

但是,無濟於事。上述URL重定向都不起作用。也就是說,我得到HTTP狀態404 - [描述,請求的資源不可用]。

(注:主要佈局模板,以及包含了「我的空間」頁面定義的JSP文件位於「WEB-INF /意見」的文件夾。)

下面是一些相關的配置信息。

什麼可能阻止我重定向到Tiles頁面定義:「myPage」?


的applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> 
    <beans:beans xmlns="http://www.springframework.org/schema/mvc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:beans="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-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/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> 

     <context:component-scan base-package="aaa.bbb.ccc" /> 
     <context:annotation-config /> 
     <mvc:annotation-driven/> 
     <resources mapping="/resources/**" location="/resources/" /> 

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

     <beans:bean id="tilesViewResolver1" 
        class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" 
        p:order="0"/> 

     <beans:bean id="tilesViewResolver2" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
      <beans:property name="viewClass"> 
       <beans:value>org.springframework.web.servlet.view.tiles2.TilesView</beans:value> 
      </beans:property> 
     </beans:bean> 

     <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
      <beans:property name="definitions"> 
       <beans:list> 
        <beans:value>/WEB-INF/tiles.xml</beans:value> 
       </beans:list> 
      </beans:property> 
     </beans:bean> 
    </beans:beans> 

的web.xml(片斷)

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app version="2.5" 
      xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    - 
    - 
    - 
     <servlet> 
      <servlet-name>appServlet</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>/WEB-INF/servlet-context.xml</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 

     <servlet-mapping> 
      <servlet-name>appServlet</servlet-name> 
      <url-pattern>/</url-pattern> 
     </servlet-mapping> 
    - 
    - 
    - 
    </web-app> 

tiles.xml
<tiles-definitions> 
     <definition name="mainpagedef" template="/WEB-INF/views/layout01.jsp"> 
      <put-attribute name="title" value="My Page" type="string"/> 
      <put-attribute name="cssPage1" value="/WEB-INF/views/stylesheet.jsp" /> 
      <put-attribute name="jsPage1" value="" /> 
      <put-attribute name="jsPage2" value="" /> 
      <put-attribute name="body" value="" /> 
      <put-attribute name="footer" value="/WEB-INF/views/footer.jsp" /> 
     </definition> 
     - 
     - 
     - 
     <definition name="myPage" extends="mainpagedef"> 
      <put-attribute name="jsPage1" value="/WEB-INF/views/javascript.jsp" /> 
      <put-attribute name="body"> 
       <definition template="/WEB-INF/views/subpage01.jsp"> 
        <put-attribute name="header" value="/WEB-INF/views/header.jsp" /> 
        <put-attribute name="main" value="/WEB-INF/views/main.jsp" /> 
       </definition> 
      </put-attribute> 
     </definition> 
     - 
     - 
     - 
    </tiles-definitions> 

layout01.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
    <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
    <%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8; pageEncoding=UTF-8"> 
      <title><tiles:getAsString name="title" /></title> 
      <tiles:insertAttribute name="cssPage1" /> 
      <tiles:insertAttribute name="jsPage1" /> 
      <tiles:insertAttribute name="jsPage2" /> 
      <script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/main.js"></script> 
     </head> 
     <body> 
      <div class="page"> 
       <div class="container"> 
        <tiles:insertAttribute name="body" /> 
        <tiles:insertAttribute name="footer" /> 
       </div> 
      </div> 
     </body> 
    </html> 

subpage01.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
    <%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
    <div class="page"> 
     <div class="container"> 
      <div> 
       <tiles:insertAttribute name="header" /> 
      </div> 
      <div> 
       <tiles:insertAttribute name="main" /> 
      </div> 
     </div> 
    </div> 

一些環境信息:

  • Spring爲V3.2.x
  • 瓷磚V2.2
  • 的Java v1.6x
  • 互聯網 瀏覽器  8瀏覽器。
+0

一個servlet重定向發送HTTP響應返回給客戶端與所述URL的狀態碼302(實測值)打下。 –

+0

謝謝,Sotirios。你能否解釋一下,在使用Tiles頁面定義時,如何正確編碼上面的示例return語句,即爲了實現「重定向」? - 再次感謝您回覆我的問題! :-) – sairn

+0

嘗試使用通配符' * .jsp'或'/ jsp/*'的網址格式。 –

回答

5

感謝Sotirios的評論留下的提示,我發現我無法「重定向」到「myPage」與Tiles沒有任何關係。

相反,經過一番苦戰,我意識到它是與「myPage」關聯的控制器的配置。

爲了執行成功的重定向(即從另一個控制器),我必須向控制器添加下面的「public ModelAndView myPage(HttpSession session)」方法(參見下面的片段)使用

return new ModelAndView("redirect:/myPage"); 

的問題是, 「我的空間」 控制器沒有包含一個 「公共的ModelAndView MYPAGE(HttpSession的會議)」 的方法......(再次感謝,Sotirius)。

下面,是「公共的ModelAndView MYPAGE(HttpSession的會議)」方法 - 的代碼片段)

@Controller 
    @Scope("session") 
    @SessionAttributes(
     { 
     "sharedList" 
    })  
    public class MyPageController implements Serializable 
    { 

     @ModelAttribute("sharedList") 
     public List<Pojo1> createSharedList() 
     { 
      return new ArrayList<Pojo1>(); 
     } 


     @RequestMapping(value = "/myPage", method = RequestMethod.GET) 
     @ResponseBody 
     public ModelAndView myPage(HttpSession session) 
     { 
      createSharedList(); 
      return new ModelAndView("myPage"); 
     } 
    - 
    - 
    - 
相關問題