Я пытаюсь вызвать метод 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>
Кто-нибудь может пролить свет на то, что здесь может быть неправильно?
Поскольку подпись вашего метода (public void invokeController(String controllerId, Object... args)
) говорит, что у вас есть varargs в вашем методе, который не поддерживается EL.
Контейнер сервлета совместим с EL 3.0, поэтому нет проблем с передачей аргументов из представления. Однако вам нужно будет изменить свою подпись метода, чтобы сделать ее полностью совместимой.
Смотрите также:
dmxAdapter.invokeController
метод. Какая у него подпись?