Как получить доступ к модели в JSTL за пределами EL? - PullRequest
1 голос
/ 26 сентября 2011

В языке выражений я могу получить доступ к своей модели следующим образом: $ {model.member} Как мне добиться того же, когда я хочу использовать <% = some_method ($ {model.member});%>

Причина в том, что у меня есть несколько вспомогательных методов HTML, которые я создал для отделения логики от пользовательского интерфейса, и мне нужно передать элемент модели для создания пользовательского элемента управления.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2011

Основной метод JSP имеет следующую подпись:

        _jspService(HttpServletRequest request,
                    HttpServletResponse response)
             throws ServletException, java.io.IOException

Исходя из этого, вы можете программно получать доступ к объектам запросов и ответов из скриплета. Например:

        <%= request.getParameter("foo").toString() %>

или

        <%= request.getAttribute("bar").toString() %>

Если вы хотите сделать что-то более сложное, вы можете добавить к ним скриптлеты для объявления / инициализации локальных (Java) переменных; например,

        <% String foo = request.getParameter("foo") == null ?
                   "no foo" : request.getParameter("foo").toString(); %>

        <%= foo %>

Вы можете использовать это для поиска вашей модели в объекте запроса или ответа (я думаю, что это будет атрибут запроса с именем «модель»), приведение его к соответствующему типу и вызов его методов получения.


Причина в том, что у меня есть несколько вспомогательных методов HTML, которые я создал, чтобы отделить логику от пользовательского интерфейса, и мне нужно передать член модели для создания пользовательского элемента управления.

Лучше было бы превратить эти вспомогательные методы в пользовательские теги JSP, чтобы их можно было использовать, не прибегая к скриптлетам. Обычно считается, что JSP со встроенными скриптлетами трудно читать и поддерживать. Одна маленькая ошибка (или одно изменение в API модели), и JSP генерирует плохую Java на вашей платформе развертывания, и вы получаете неработающую страницу.

0 голосов
/ 26 сентября 2011

Посмотрите на пользовательские функции JSTL.Это позволяет вам вызывать статические функции из вашего кода стандартным способом JSTL.Вам просто нужно установить его в свой файл TLD.

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