是否可以在spring mvc 3中配置目标视图名称?

时间:2010-12-01 19:29:27

标签: java spring spring-mvc

代码段如下:

@Controller
@RequestMapping(value="/test")
public class TestController {
........        
    @RequestMapping(method=RequestMethod.GET)
    public String getCreateForm(Model model) {
        model.addAttribute(new AccountBean());
        return "newtest";
    }
.........

“newtest”是硬编码的视图名称。是否可以在XML样式的Spring配置文件中配置它?谢谢!

2 个答案:

答案 0 :(得分:4)

我想真正的问题是如何通过XML配置autodiscovered bean的属性。

你可以通过定义一个与自动发现的名称相同的<bean>来实现它(当未指定autodiscovered bean的名称时,它被认为是第一个字母被去除资本化的类名):

@Controller 
@RequestMapping(value="/test") 
public class TestController { 
    private String viewName = "newtest";

    public void setViewName(String viewName) {
        this.viewName = viewName;
    }

    @RequestMapping(method=RequestMethod.GET) 
    public String getCreateForm(Model model) { 
        model.addAttribute(new AccountBean()); 
        return viewName; 
    } 
}

<bean id = "testController" class = "TestController">
    <property name = "viewName" value = "oldtest" />
</bean>

另一种选择是将@Value与SpEL表达式

一起使用
@Value("#{testViewName}") private String viewName;

<bean id = "testViewName" class = "java.lang.String">
    <constructor-arg value = "oldtest" />
</bean>

或财产占位符

@Value("${testViewName}") private String viewName;

<context:property-placeholder location = "viewnames" />

viewnames.properties

testViewName=oldtest

答案 1 :(得分:1)

嗯,可以在那里返回任何字符串。所以是的 - 它可以配置。

更新:有很多方法可以配置它,其中一个(和我的偏好)是PropertyPlaceholderConfigurer@Value注释的组合,但这已经被axtavt所涵盖。