Freemarker自定义方法 - 在没有明确传递的情况下获取ModelAndView

时间:2012-02-26 09:10:04

标签: freemarker

我编写了自己的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的直接引用。

由于

1 个答案:

答案 0 :(得分:1)

如何获取模板中的当前ModelAndView?从数据模型(模板上下文)可能?因为那时你可以调用Environment.getCurrentEnvironment().getDataModel().get("theVariableName")来获取它。 (见:http://freemarker.org/docs/api/freemarker/core/Environment.html