Как связать метод бина с пакетом в 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-артефактов.