在我们的控制器中,我们有填充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变量的适当位置是什么?我只是在我的“常规”模型上创建模型字段以支持它们吗?
答案 0 :(得分:1)
@ModelAttribute only supported for controller classes with @RequestMapping methods,因此您无法移至模型对象。
us_states不是JSP变量,它是传递给JSP时与Model对象关联的控制器范围内的全局变量。
如果有一次静态数据必须从数据库加载(比如状态),而不是每次都调用,我更喜欢使用@ModelAttribute,你可以将状态放在Enum中并将其传递给JSP。