[英]Varargs in thymeleaf @ModelAttribute?
我想将@ModelAttribute
评估的多个变量参数(包括无变量)从html百里香页传递给方法:
//provide 0 or X params
@ModelAttribute("url")
public String url(String... params) {
return "generatedurl";
}
以下百里香语句应该是可能的:
th:href="@{${url()}"
th:href="@{${url('page')}}"
th:href="@{${url('page', 'sort')}}"
但这行不通。 为什么?
@ModelAttribute
用于将公共对象绑定到模型。
每次从用@ModelAttribute
注释的方法url()
中返回一个字符串generatedurl
url()
。 因此,在您的Thymleaf视图中,每次您执行${url}
您都会generatedurl
。
解决您的问题的一种方法可能是
@ModelAttribute("url")
public void url(Model model) {
model.addAttribute("url","YOUR_URL");
model.addAttribute("sort","age");
}
解决方法:将封闭类添加为模型参数,然后从百里香在此参数上调用方法:
@Controller
public class PageController {
@GetMapping
public String persons(Model model) {
model.addAttribute("util", this);
return "persons";
}
public String url(String... params) {
//evaluate...
return "generatedurl";
}
}
然后可以像往常一样访问这些方法:
th:href="@{${url()}"
th:href="@{${url('page')}}"
th:href="@{${url('page', 'sort')}}"
唯一的缺点当然是必须将类显式添加到模型中。
另一个选择是使用我需要的参数排列来初始化模型。 但这不太灵活:
@ModelAttribute
public void init(Model model) {
model.addAttribute("plainUrl", ...);
model.addAttribute("pageUrl", ...);
model.addAttribute("pageSizeUrl", ...);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.