Как передать аргументы метода в ActionListener? - PullRequest
3 голосов
/ 31 января 2012

Я создаю динамически генерируемое меню.В базе данных я сохранил каталог (String) каждого подменю и сохранил в ArrayList в компоненте.Это часть кода:

<c:forEach items="#{controlWeb.algorithms}" var="alg">
    <h:form>
        <h:commandLink actionListener="#{controlWeb.setContent(PROBLEM)}"  value="About"/>
    </h:form>
</c:forEach>

Проблема в «ПРОБЛЕМЕ».Я хочу написать #{alg.algorithm1}, и это не работает, потому что я думаю, что невозможно вложить выражения EL.

actionListener устанавливает String #{alg.algorithm1} в другом String.Как мне выполнить требование?

1 Ответ

11 голосов
/ 31 января 2012

Используйте action, а не actionListener. actionListener должен быть привязан к методу, который принимает ActionEvent в качестве единственного аргумента, без оправданий. Кроме того, actionListener предназначен не для вызова действий, а для прослушивания действий (так что вы можете войти в него или выполнить какую-либо задачу предварительной обработки или что-либо еще).

<c:forEach items="#{controlWeb.algorithms}" var="alg">
    <h:form>
        <h:commandLink action="#{controlWeb.setContent(alg.algorithm)}" value="About"/>
    </h:form>
</c:forEach>

Обратите внимание, что передача аргументов в EL поддерживается только начиная с EL 2.2, который поставляется вместе с Servlet 3.0 / Java EE 6. Вам необходимо убедиться, что вы нацеливаетесь на контейнер, совместимый с Servlet 3.0, с совместимым с Servlet 3.0 web.xml.

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

...