Моджарра 2.2.6 и EL 3.0: неверное количество аргументов в атрибуте действия h: commandButton

1

Я пытаюсь вызвать метод bean из кнопки команды JSF, но я продолжаю получать ошибку

javax.faces.FacesException: wrong number of arguments

Это код на моей странице:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:dmx="http://java.sun.com/jsf/composite/dmx"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <head>
        <title>TODO supply a title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    </head>
    <body>
        <ui:composition>
        <h:form>
        <div id="child"></div>
        <h:panelGroup>
            <h:outputText value="Hello, DEMUX JSF!" 
                style="color: #{dmxAdapter.model.get('testData') ? 'green' : 'red' }" />
            <h:commandButton value="Click me" 
                action="#{dmxAdapter.invokeController('com.vektorsoft.demux.samples.hello.HelloController')}"  />
        </h:panelGroup>
        </h:form>
        </ui:composition>
    </body>
</html>

Если я изменяю атрибут действия на метод вызова без параметров, все работает нормально. Я запускаю это в Jetty внутри контейнера OSGI. Версия JSF - Mojarra 2.2.6 и EL 3.0.

Я прочитал несколько ответов, в которых упоминалось, что для этого требуется EL 2.2 и выше, и я думаю, что EL 3.0 также должен работать. Это добавляется как зависимость от Maven:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.0</version>
</dependency>

Кто-нибудь может пролить свет на то, что здесь может быть неправильно?

  • 0
    Это зависит от версии Jetty, с которой вы имеете дело. Если Servlet 3.0 не совместим, недостаточно включить зависимость el, вам нужно переопределить ту, которая используется в вашем web.xml: stackoverflow.com/questions/2333605/… Также вы не сообщите нам о своем dmxAdapter.invokeController метод. Какая у него подпись?
  • 0
    Версия Jetty - 9.2.0.M1. В web.xml веб-приложение объявлено как версия 3.1 с контекстными параметрами: <context-param> <param-name> com.sun.faces.expressionFactory </ param-name> <param-value> com.sun. el.ExpressionFactoryImpl </ param-value> </ context-param> Подпись метода является публичной void invokeController (String controllerId, Object ... args)
Теги:
osgi
jsf
jsf-2

1 ответ

1
Лучший ответ

Поскольку подпись вашего метода (public void invokeController(String controllerId, Object... args)) говорит, что у вас есть varargs в вашем методе, который не поддерживается EL.

Контейнер сервлета совместим с EL 3.0, поэтому нет проблем с передачей аргументов из представления. Однако вам нужно будет изменить свою подпись метода, чтобы сделать ее полностью совместимой.

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

  • 0
    Не знал этого. Спасибо большое за вашу помощь. Отметить этот ответ как принятый.
  • 0
    Рад, что это помогло ;-) В следующий раз постарайтесь указать в вопросе также вашу бобовую сторону.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню