如何在Spring MVC中创建特定于控制器的视图解析器?

时间:2012-11-17 18:11:33

标签: spring-mvc struts

在Struts中,您经常为struts配置文件中的控制器定义成功和失败视图,例如:

<action path="/Home" type="org.sample.HomeAction">
<forward name="success" path="/views/Home.jsp"/>
<forward name="failure" path="/views/Error.jsp"/>
</action>
<action path="/AddCustomer" type="org.sample.AddCustomerAction">
<forward name="success" path="/views/AddCustomer.jsp"/>
<forward name="failure" path="/views/AddCustomerError.jsp"/>
</action>

如果这样做,相同的逻辑视图名称(成功和失败)可以解析为不同的jsps,具体取决于调用它们的控制器。相比之下,在最简单的弹簧设置中,视图解析器是全局的。在Spring MVC中复制这种配置的最简单方法是什么?

我知道一种方法是使用SimpleFormController,它具有方法getFormView()和getSuccessView(),但我不希望有必须从该类继承的限制。是否有更通用的方法来执行控制器特定的视图分辨率?

我正在研究的场景是将大量的Struts代码迁移到Spring。旧代码广泛使用“成功”和“失败”。理想情况下,我只想使用现有的Spring视图解析器并只复制相同的配置。 e.g。

<bean class="some.spring.view.resolver">
    <property>
        <controller name="org.sample.HomeAction">
             <view name="success" value="/views/Home.jsp"/>
             <view name="failure" value="/views/Error.jsp"/>
        </controller>
        <controller name="org.sample.AddCustomerAction">
             <view name="success" value="/views/AddCustomer.jsp"/>
             <view name="failure" value="/views/AddCustomerError.jsp"/>
        </controller>               
</bean>

是否存在一个现有的Spring视图解析器,它支持将相同的逻辑视图名称解析为不同的值,具体取决于调用它们的控制器?或者我是否需要自己编写或更新逻辑视图名称才能全局唯一?

感谢。

1 个答案:

答案 0 :(得分:0)

您只需从控制器方法返回不同的视图名称:

@RequestMapping("/home")
public String home() {

  try {
   // Some logic

   return "home";
  } catch (Exception e) {
    return "error";
  }
}

这将根据调用控制器方法的结果解析相应的jsp视图。这非常类似于struts2方法返回表示action方法结果的字符串,你只需要额外的xml就可以将结果字符串映射到jsp视图。