繁体   English   中英

百里香@ModelAttribute中的Varargs?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM