Spring 3 formBackingObject可以返回不同的命令类吗?

时间:2015-09-24 14:33:21

标签: java spring spring-mvc

我有一种情况需要检查formBackingObject中的条件,并根据条件返回两个类中的一个。

问题在于,据我所知,我只能在servlet.xml中定义一个commandName和commandClass。有人知道我可以处理这个问题吗?它似乎不是一个罕见的用例,但我还没有在网上找到任何解决方案。

这是我的控制器formBackingObject的逻辑块:

    List<FooLoadShed> fooLoadShedList = this.fooLoadShedDao.getActiveSheds();
    if(fooLoadShedList.isEmpty()) {
        logger.info("LoadShedActive is: " + this.sessionDetailsManager.getSessionDetails().isLoadShedActive());
        return new NoAction();
    }
    else {
        this.sessionDetailsManager.getSessionDetails().setLoadShedActive(true);
        logger.info("LoadShedActive is   : " + this.sessionDetailsManager.getSessionDetails().isLoadShedActive());
        logger.info("Number of load sheds: " + nieLoadShedList.size());
        return new ModelAndView(new RedirectView("custLookup.htm"));
    }

和我的servlet.xml配置:

<bean name="/index.htm" class="springapp.web.indexController" scope="session">
    <property name="sessionForm" value="true"/>
    <property name="commandName" value="noAction"/>
    <property name="commandClass" value="springapp.service.NoAction"/>
    <property name="formView" value="index"/>
    <property name="sessionDetailsManager" ref="sessionDetailsManager"/>
    <property name="mobiConfigDao" ref="mobiConfigDao"/>
    <property name="fooLoadShedDao" ref="fooLoadShed" />
</bean>

1 个答案:

答案 0 :(得分:2)

这是配置控制器Spring MVC的一种非常古老的方法!十多年来没见过这样的东西。为什么不使用更现代的Spring MVC配置,使用注释而不是XML?

在任何情况下,命令类的重要性都在POST中。 Spring MVC必须能够构造命令类的实例。为此,它需要知道具体的类名。然后,它将表单值应用于已创建的命令类对象的属性。这个完全填充的命令对象将在处理程序方法中传递给您。

XML中的配置用于默认命令对象创建过程。你可以覆盖它。在现代的Spring MVC中,这是一个方法级别的@ModelAttribute注释。在古老的Spring MVC中,您需要覆盖创建命令对象的方法并自己创建命令对象。 BaseCommandControllercreateCommand方法受到保护。如果这是你创建控制器的方式,那就是你必须开始的地方。