2015-10-25 7 views
0

У меня есть абстрактный класс контроллера Spring, расширенный различными контроллерами. Пример метода:Spring mvc: Результат контроллера resent to 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 строка возврата используется для нового запроса контроллера. Это Log:

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 

Это сервлет-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. Ah - и я обновился до версии java 1.6.

Любые идеи, почему весна использует templatename «ajaxtemplate» в качестве нового запроса и отправляет его обратно на контроллер?

С наилучшими пожеланиями Маркус

ответ

0

Глупая ошибка: никогда не программка за полночь:

<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> 
Смежные вопросы