mvc: view-controller вызывает PageNotFound в Spring Tiles2 - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть веб-приложение, основанное на Spring 3.0.6, которое отлично работает на Tomcat 7.0.

web.xml определяет диспетчер следующим образом:

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

Диспетчер определяет преобразователь представления обычным образом:

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

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

У меня есть контроллер с аннотацией @RequestMapping("/home") и представлением "home", определенным в tiles-def.xml. Когда я указываю своему браузеру на /myapp/home.html, открывается страница Tiles.

Если я добавлю <mvc:resources mapping="/resources/**" location="/resources/" /> или <mvc:view-controller path="/" view-name="home.html"/> в мой xml-файл диспетчера, при указании в браузере значения /myapp/home.html получится 404. В журнале будет указано:

21:34:22,128  WARN PageNotFound:947 – No mapping found for HTTP request with URI [/myapp/home.html] in DispatcherServlet with name 'dispatcher'

Что я делаю не так?

Большое спасибо

1 Ответ

0 голосов
/ 18 октября 2011

Проблема в моем приложении была из-за автоматического разрешения имени представления.Мой аннотированный метод в моем @Controller возвратил void, и фреймворк попытался угадать имя представления плиток, используя путь запроса.

Я изменил свой аннотированный метод следующим образом, возвращая String:

@RequestMapping(value="/page", method = RequestMethod.GET)
public String showForm(HttpServletRequest request, Model model) {
    // TO BUSINESS LOGIC

    // return tiles view name as configured in 'tiles-def.xml'
    return "my_tiles_view_name";
}

С этим изменением все работает нормально.

...