@ModelAttribute显示值方法(对于JSP变量)在Controller之外

时间:2015-11-18 19:26:49

标签: spring jsp spring-mvc

在我们的控制器中,我们有填充JSP使用的一些显示值的方法。示例:美国州名单:

@Controller
@RequestMapping("/myURL")
public class MyController {

    //...

    // A US State ModelAttribute populator used by JSP
    @ModelAttribute("us_states")
    public TreeMap<String,String> getStateDisplayValues()
    {
        // ... Code to populate US states for a dropdown
    }

}

在JSP中:

<form:select path="state">
  <form:options items="${us_states}" />
</form:select>

但是有人担心控制器不应该使用这种方法,它应该放在不同的地方,比如Model。也许我们通过定义这些方法来违反某些MVC原则。控制器。

但是,当我尝试将这些@ModelAttribute方法移动到我的Model对象时,JSP停止工作。放置这些JSP变量的适当位置是什么?我只是在我的“常规”模型上创建模型字段以支持它们吗?

1 个答案:

答案 0 :(得分:1)

@ModelAttribute only supported for controller classes with @RequestMapping methods,因此您无法移至模型对象。

us_states不是JSP变量,它是传递给JSP时与Model对象关联的控制器范围内的全局变量。

如果有一次静态数据必须从数据库加载(比如状态),而不是每次都调用,我更喜欢使用@ModelAttribute,你可以将状态放在Enum中并将其传递给JSP。