Почему мое сопоставление контроллера Spring MVC не может ссылаться на другое сопоставление в том же контроллере? - PullRequest
1 голос
/ 25 августа 2011

У меня следующий контроллер отображается как

@Controller( value = "stockToStoreController" )
@RequestMapping("/stsr")
public class StockToStoreController extends BaseController {...}

У меня есть отображение удаления

@Transactional(propagation = Propagation.REQUIRED)
@RequestMapping(value = "/delete")
public String delete(@RequestParam("xxxId") long xxxId) {

    XXXModel xxxModel = stockToStoreDao.findById(xxxId);
    if(xxxModel != null) {
        xxxDao.delete(xxxModel);
    }
    return "/stsr/requery";
}

Это отображение выглядит так

@SuppressWarnings("unchecked")
@RequestMapping(value = "/requery")
public ModelAndView requery(HttpServletRequest request) {
    ModelAndView mav = new ModelAndView("manageStockToStore");

     //do stuff

     return mav;
}

Я пытаюсь вызвать другое отображение в return, т.е. вернуть "/ stsr /query"; я получил следующая ошибка:

Неопределенное исключение, выброшенное в одном из методов обслуживания сервлета: mptstp. Возникло исключение: javax.servlet.ServletException: не удалось разрешить представление с именем '/ stsr /query' в сервлете с именем 'xxx'

Вопрос в том, нужно ли где-то явно определять это отображение? У меня не определен MappingHandlers, и мой -servlet.xml выглядит как

    <!-- Configures the @Configuration annotation for java configuration -->
<context:annotation-config/>

<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="xxx.testspringmvc.stsr" />

<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />

<!-- Configures resources so they can be used across web modules -->
<mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/public-resources/" />

<!-- Application Message Bundle -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames" value="classpath:META-INF/public-resources/mptstp-messages, classpath:META-INF/public-resources/mptstp-error-messages, classpath:META-INF/public-resources/stsr/stsr-messages" />
    <property name="cacheSeconds" value="0" />
</bean>

<!-- Spring MVC View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <property name="basename" value="stsr-views" />
    <property name="defaultParentView" value="parentView"/>
</bean>

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean id="urlConfiguredSiteIdInterceptor" class="xxx.testspringmvc.stsr.interceptor.UrlConfiguredSiteIdInterceptor">
            <property name="siteIdConfigParamName" value="urlConfiguredSiteId" />
            <property name="errorView" value="siteIdNotFound" />
        </bean>
    </mvc:interceptor>
</mvc:interceptors>

Любая помощь от вас, ребята, будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Два варианта:

  • вы можете перенаправить return "redirect:/stsr/requery"
  • вы можете напрямую вызвать другой метод: return requery(request);
1 голос
/ 25 августа 2011

Он ищет вид, и вам нужно сопоставление. Вы должны использовать редирект:

return "redirect:/stsr/requery";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...