在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视图解析器,它支持将相同的逻辑视图名称解析为不同的值,具体取决于调用它们的控制器?或者我是否需要自己编写或更新逻辑视图名称才能全局唯一?
感谢。
答案 0 :(得分:0)
您只需从控制器方法返回不同的视图名称:
@RequestMapping("/home")
public String home() {
try {
// Some logic
return "home";
} catch (Exception e) {
return "error";
}
}
这将根据调用控制器方法的结果解析相应的jsp视图。这非常类似于struts2方法返回表示action方法结果的字符串,你只需要额外的xml就可以将结果字符串映射到jsp视图。