Пользовательский метод Freemarker - получить ModelAndView без его явной передачи

Я написал свой собственный механизм маршрутизации URL-адресов, который позволяет отображать URL-адреса в ModelAndViews и ModelAndViews обратно в 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.

Спасибо


person Vojtěch    schedule 26.02.2012    source источник


Ответы (1)


Как получить текущий ModelAndView в шаблоне? Может быть, из модели данных (контекст шаблона)? Потому что тогда вы могли бы позвонить Environment.getCurrentEnvironment().getDataModel().get("theVariableName"), чтобы получить его. (См.: http://freemarker.org/docs/api/freemarker/core/Environment.html)

person ddekany    schedule 26.02.2012