我编写了自己的url路由机制,允许将ModelAndViews和ModelAndViews的URL映射回URL(https://github.com/knyttl/Maite/wiki/Maite-Routing)。
我正在尝试创建一个Freemarker方法,该方法将修改当前的ModelAndView并调用反向路由过程。
所以在模板中我想实现类似的东西:
${link("view", [id:10, page:1])}
然后宏将被定义为:
@Autowired
HandlerAdapter ha;
public TemplateModel exec(List args) throws TemplateModelException {
ModelAndView current = __getItSomehowFromTheTemplate();
if (current.getViewName() != (String) args.get(0)) {
// if the view is the same, we just modify the model
...
current.set...
} else {
// the view is different, we create a new ModelAndView
current = new ModelAndView();
}
// reverse routing process
return new SimpleScalar(ha.constructUrl(current));
}
我想知道每次是否必须将ModelAndView传递给方法,或者我可以让Freemarker以某种方式自动传递它,就像我的魔法__getItSomehowFromTheTemplate();
如果我必须自动传递,我该怎么办?我没有找到任何对当前ModelAndView的直接引用。
由于
答案 0 :(得分:1)
如何获取模板中的当前ModelAndView
?从数据模型(模板上下文)可能?因为那时你可以调用Environment.getCurrentEnvironment().getDataModel().get("theVariableName")
来获取它。 (见:http://freemarker.org/docs/api/freemarker/core/Environment.html)