Ответ 1
Я вижу, что вы облегчаете традиционный подход догадки-как-он-работает-используя-bare-intuition-and-random-association-then-act-surprise: -)
f:actionListener
позволяет вам добавлять весь объект в качестве наблюдателя, а не произвольный метод. Вы можете использовать атрибут type
, чтобы указать имя класса (он будет создан с помощью JSF) или атрибут binding
, чтобы предоставить экземпляр созданного вами объекта (а не метода!). Объект должен реализовать javax.faces.event.ActionListener
.
Вторая попытка (testDeviceGroupController.prepareCreate(event)
) неверна на многих уровнях, но суть в том, что методы вызываются не для обработки вашего действия, а для создания экземпляра Actionlistener
.
У вас есть несколько вариантов:
- Самый простой: просто создайте метод, который вызывает каждый из целевых методов. Поскольку они находятся на разных beans, вы можете вводить один в другой.
- Если это не сработает для вас, вы можете создать метод, создающий объект-слушатель.
Вот так:
public ActionListener createActionListener() {
return new ActionListener() {
@Override
public void processAction(ActionEvent event) throws AbortProcessingException {
System.out.println("here I have both the event object, and access to the enclosing bean");
}
};
}
и используйте его следующим образом:
<h:commandButton>
<f:actionListener binding="#{whateverBean.createActionListener()}"/>
</h:commandButton>