Почему EL-функции должны быть из методов Java с не возвращаемыми типами возврата? - PullRequest
0 голосов
/ 31 июля 2011

У меня есть ситуация, в которой я считаю хорошей идеей использовать функцию EL, которая является методом void java. Это простой jsp для обновления базы данных имени и фамилии людей. Итак, есть два текстовых поля: имя и пароль. Пользователь вводит их и нажимает «отправить», и он отправляет их с POST в другой JSP. Этот jsp просто вызывает функцию EL, давайте назовем ее «put», которая принимает два параметра и получена из java-метода putPerson(String, String), который получает соединение с базой данных и помещает имя и фамилию на свои места. Теперь putPerson является недействительным, потому что все, что он делает, это помещает строки в базу данных. Итак, это плохая практика программирования, и если да, то почему? Мне кажется, это быстрое и элегантное решение, и оно работает. Единственная проблема в том, что вы не можете просто позвонить, сказав ${put(first, last)}, потому что по какой-то причине это выводит «<», но это достаточно легко обойти. Так почему же они рекомендуют не использовать функции EL с типами возвращаемых пустот? </p>

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Печать < будет поступать откуда-то еще или является ошибкой в ​​синтаксическом анализаторе EL.Но в любом случае, вы не должны делать это в EL-функции.

EL-функции предназначены для утилит - например, .substring(), .join() (массивы) и т. Д. И они используются, пока выотображение страницы и нужна более сложная логика представления .

То, что вы хотите сделать, - это типичная история, и она выполняется в сервлете (или любом другом компоненте действия, если вы используете платформу).

0 голосов
/ 31 июля 2011

Механизм, который вам нужен, старше, чем EL - и он называется скриптлетом:

<%
    whatever.putPerson("John", "Smith");
%>

В ранних версиях JSP для печати значений использовался другой синтаксис (обратите внимание на знак равенства):

<%=
    whatever.getVal();
%>

Поскольку считалось, что легче поддерживать код при наличии разделения команды / запроса, EL был введен как способ запроса модели (= чтение свойств bean-компонентов). Поскольку скриптлеты были доступны для редких случаев, когда просто «запускать некоторый код» было бы необходимо, добавление такой функциональности в EL не имело бы смысла: у нас было бы два способа достичь того же самого, и мы бы нарушили концепцию EL выражения всегда имеют значение и тип.

Итак:

  • использование EL для вызова методов void похоже на ... uhmpf ... использование импорта для запуска кода: это не имеет смысла;
  • это не проблема, поскольку вы можете использовать тот самый механизм, который был создан для вызова методов: скриптлет.
...