Как связать метод бина с пакетом в actionListener?

Я в значительной степени новичок в технологии Java/JSF, и я пытался создать простой пользовательский интерфейс, чтобы понять, как обстоят дела в мире Java/JSF.

Теперь я хочу связать метод ManagedBean с именем пакета с actionListener CommandButton.

Пример:

index.xhtml

...
<h:commandButton actionListener="#{com.acme.myclass.MyMethod}" ...
...

MyClass.java

package com.acme;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped

public class MyClass {

    public MyClass() {
        // Constructor
    }

    public void MyMethod() {
        // Do some job
    }

}

Я пытался связать метод, как в приведенном выше примере, но метод не вызывается. Кроме того, я не вижу свои пакеты в маленьком окне автозаполнения Netbeans. Если я связываю метод в формате #{class.method} (как все приведенные примеры в Интернете), он работает.

Есть ли способ добиться этого?

Зачем мне это делать?

В то время как проекты становятся все больше и больше, классы именования становятся все сложнее и сложнее. Итак, я думаю, что одни и те же имена классов в разных пакетах облегчают жизнь.

1 ответ

Решение

JSF не допускает такого рода привязки actionlistener, просто. Единственное сходство с тем, что у вас есть в мире JSF, - это отдельная реализация ActionListener интерфейс, с помощью которого вы можете затем предоставить FQN:

  <h:commandButton>
       <f:actionListener type="com.you.YourActionListenerImpl" />
  </h:commandButton>

куда YourActionListenerImpl будет реализация класса ActionListener как упоминалось ранее

Что касается того, почему вы хотите это сделать, я думаю, вы преувеличиваете стоимость именования - это не так сложно. Массивные, растягивающиеся проекты прекрасно уживаются (например, посмотрите на проект Spring) с именами Java-артефактов.

Другие вопросы по тегам