【发布时间】:2015-02-09 05:32:57
【问题描述】:
在我当前的 spring 项目中,我有一个像这样的通用控制器:
public class basicController<E> {
@Autowired
private basicService<E> serv;
protected Class<?> clazz;
public basicController(Class<?> clazz) {
this.clazz = clazz;
}
...
}
使用这样的方法:
@ModelAttribute("lista")
public List<E> populateList() {
return serv.lista();
}
我想知道是否可以在这样的结构中(在 html 页面中)使用 lista 的值:
<select class="form-control" th:name="...">
<option th:each="opt : ${lista}" th:value="${opt.getId()}"><span th:text="${opt}"/>
</option>
</select>
这个页面被映射到控制器中,方法如下:
通用控制器
@RequestMapping(value = "cadastra")
@PreAuthorize("hasPermission(#user, 'cadastra_'+#this.this.name)")
@Menu(label = "cadastra")
public String cadastra(Model model) throws Exception {
model.addAttribute("command", serv.newObject());
return "private/cadastra";
}
家庭控制器(包含公共视图的映射等)
@RequestMapping(value = "/settings")
public String settings(Model model) throws Exception {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
model.addAttribute("usuario", auth.getName());
model.addAttribute("menu", MenuList.index());
model.addAttribute("settings", MenuList.settings());
return "private/settings";
}
@RequestMapping(value = "/profile")
public String profile(Model model) throws Exception {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
model.addAttribute("usuario", auth.getName());
model.addAttribute("menu", MenuList.index());
model.addAttribute("command", usuario(auth.getName()));
return "private/profile";
}
有人对此有任何想法吗?
【问题讨论】:
-
lista可以通过视图访问。你遇到什么问题了吗? -
@zeroflagL 是的,当我运行项目并访问视图时,
<option th:each="opt : ${lista}" th:value="${opt.getId()}">在最后一页中不生成任何选项,就像lista为空一样,即使它不是。 -
您的控制器是否继承自
basicController?我不确定 Spring MVC 是否处理继承的注释。所以populateList可能不会被调用。 -
@zeroflagL 是的,控制器继承自
basicController
标签: spring spring-mvc controller modelattribute