0

在 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 设置中,视图解析器是全局的。在 Spring MVC 中复制这种配置的最简单方法是什么?

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

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

<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 视图解析器支持根据调用它们的控制器将相同的逻辑视图名称解析为不同的值?还是我需要自己编写或更新逻辑视图名称以使其全局唯一?

谢谢。

4

1 回答 1

0

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

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

  try {
   // Some logic

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

这将根据调用控制器方法的结果解析适当的 jsp 视图。这与 struts2 返回表示 action 方法结果的字符串的方法非常相似,只是不需要额外的 xml 将结果字符串映射到 jsp 视图。

于 2012-11-17T18:43:31.737 回答