2015-10-25 72 views
0

我有一個抽象的Spring Controller類,由各種控制器擴展。 實例方法:Spring MVC:控制器結果重新發送到RequestMappingHandlerMapping

@Override 
@RequestMapping(value = { "/", "" }, method = RequestMethod.GET) 
public String getAllAsView(@RequestParam(required = false) boolean ajax, 
     Model m) { 
    String mapping = elementClass.getSimpleName(); 
    m.addAttribute(mapping + "List", getAll()); 
    return mapping + "All" + (ajax ? "Ajax" : ""); 
} 

這些人是我view.xml用相關的定義:

<definition name="maintemplate" template="/WEB-INF/views/main_template.jsp"> 
    <put-attribute name="top" value="/WEB-INF/views/header.jsp" /> 
    <put-attribute name="side" value="/WEB-INF/views/menu.jsp" /> 
</definition> 
<definition name="ajaxtemplate" template="/WEB-INF/views/ajax_template.jsp"> 
    <put-attribute name="top" value="/WEB-INF/views/header.jsp" /> 
</definition> 
<definition name="PersonAll" extends="maintemplate"> 
    <put-attribute name="content" value="/WEB-INF/views/personlist.jsp" /> 
</definition> 
<definition name="PersonAllAjax" template="ajaxtemplate"> 
    <put-attribute name="content" value="/WEB-INF/views/personlist.jsp" /> 
</definition> 

隨着AJAX參數只有主體內容是返回。

一切工作正常,沒有ajax參數。 但是使用Ajax參數返回字符串用於新的Controller請求。 這是日誌:

DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /person/6 
TRACE: org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Invoking [PersonController.getAsView] method with arguments [6, true, {}] 
WARN : de.kreth.clubhelperbackend.aspects.DaoLoggerAspect - de.kreth.clubhelperbackend.dao.PersonDao.getById(6) ==> 6: M Kreth 
TRACE: org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Method [getAsView] returned [PersonGetAjax] 
DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /person/ajaxtemplate 

這是servlet-context.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:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

<context:component-scan base-package="de.kreth.clubhelperbackend" /> 

<mvc:annotation-driven> 
    <mvc:message-converters> 
     <bean 
      class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper"> 
       <bean 
        class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> 
        <property name="dateFormat"> 
         <bean class="java.text.SimpleDateFormat"> 
          <constructor-arg type="java.lang.String" 
           value="dd/MM/yyyy HH:mm:ss.SSS Z"></constructor-arg> 
         </bean> 
        </property> 
       </bean> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

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

<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" /> 

<bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"> 
    <property name="order" value="1" /> 
</bean> 

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/views/**/views.xml</value> 
     </list> 
    </property> 
</bean> 

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

我堅持找出這裏發生了什麼。我更改了模板名稱,新名稱用於請求。

問題出現後,我改變了項目中幾乎所有的XML文件。我插入了Doctype標籤並更改了模式定義和內容。因爲那導致了嚴重的問題,我回到了一個工作版本。在此之前,ajax參數起作用。 啊 - 我更新到Java版本1.6。

任何想法爲什麼彈簧使用templatename「ajaxtemplate」作爲新的請求,並將其發送回控制器?

問候 馬庫斯

回答

0

愚蠢的錯誤:從未PROGRAMM過了午夜:

<definition name="PersonAllAjax" template="ajaxtemplate"> 
    <put-attribute name="content" value="/WEB-INF/views/personlist.jsp" /> 
</definition> 

必須

<definition name="PersonAllAjax" extends="ajaxtemplate"> 
    <put-attribute name="content" value="/WEB-INF/views/personlist.jsp" /> 
</definition>