我有一种情况需要检查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>
答案 0 :(得分:2)
这是配置控制器Spring MVC的一种非常古老的方法!十多年来没见过这样的东西。为什么不使用更现代的Spring MVC配置,使用注释而不是XML?
在任何情况下,命令类的重要性都在POST中。 Spring MVC必须能够构造命令类的实例。为此,它需要知道具体的类名。然后,它将表单值应用于已创建的命令类对象的属性。这个完全填充的命令对象将在处理程序方法中传递给您。
XML中的配置用于默认命令对象创建过程。你可以覆盖它。在现代的Spring MVC中,这是一个方法级别的@ModelAttribute注释。在古老的Spring MVC中,您需要覆盖创建命令对象的方法并自己创建命令对象。 BaseCommandController
有createCommand
方法受到保护。如果这是你创建控制器的方式,那就是你必须开始的地方。