EL эквивалент ‹% = object.method (параметр)%› в WAS 8?

В документации говорится, что параметры поддерживаются, но в примере используются неизвестные мне hl и #, где я использую c: и $ вместо этого, взятого из документации:

<h:inputText value="#{userNumberBean.userNumber('5')}">

Все, что я знаю о $ vs # в EL, это то, что связано с rvalue и lvalue, и мне может потребоваться дополнительное объяснение, когда использовать стиль #. Я ищу, как выражение EL типа $ ... может принимать параметр и как вызывать не-геттеры, не-сеттеры с параметром, например, извлечение постоянной статической строки из bean-компонента в контексте запроса.

Что делает # по сравнению с $? Как мне использовать параметры в EL, если я хочу использовать $? Скриплеты, которые я хочу перенести на EL, похожи на <%= Constants.CONSTANT %> и <%= object.method(parameter) %>, которые я хочу сделать в EL.


person Niklas R.    schedule 24.05.2012    source источник


Ответы (1)


Предполагается, что синтаксис #{} используется только в Java EE MVC framework JSF. См. Также Разница между JSP EL, JSF EL и Unified EL . Просто придерживайтесь синтаксиса ${} в старом JSP.

Что касается вызова методов с аргументами, это введено в Servlet 3.0 / EL 2.2. WAS 8 - это контейнер Servlet 3.0, поэтому он должен поддерживать его из коробки. Вам нужно только убедиться, что ваш web.xml соответствует версии спецификации Servlet 3.0. В противном случае контейнер будет работать в резервном режиме, соответствующем версии, указанной web.xml. Правильное объявление web.xml Servlet 3.0 выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>

Таким образом, ${object.method(param)} должен работать.

Обращение к константам в EL - это совсем другая история. Это будет введено в грядущей EL 3.0, которая является частью будущего Java EE 7 / Servlet 3.1 (и, вероятно, будущие WAS 9 или 10 будут поддерживать это). Существуют решения в виде пользовательских библиотек тегов или путем хранения их в Map, все подробно описано в этом ответе: Как ссылаться на константы в EL?

Смотрите также:

person BalusC    schedule 24.05.2012
comment
Большое спасибо BalusC, работает: ${person.getPersonTyp(GrunduppgifterConstants.persontypSokande).ordNr} работает. - person Niklas R.; 28.05.2012