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

Я написал свой собственный механизм маршрутизации 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.

Спасибо

1 Ответ

1 голос
/ 26 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...