java - Documentación para @UiHandler
gwt uibinder (2)
El parámetro que pasa a la anotación @UiHandler
es el nombre del campo apropiado al que desea asignar ese *Handler
. Entonces, en este caso está asignando un ClickHandler
a un Button button
(en realidad, solo conocemos el nombre del campo).
En cuanto a cómo funciona esto exactamente, es parte de la magia de GWT :) Mi suposición es que, al igual que cualquier otro código relacionado con UiBinder (creo que hubo una presentación en Google IO, que mostró el código que genera UiBinder), en tiempo de compilación el compilador averigua qué va a dónde. En este ejemplo: tenemos un Button button
, y tenemos un método anotado @UiHandler
que tiene un parámetro ClickEvent
-> que debe significar que es un ClickHandler
(observe que el nombre del método no importa). Así que agreguemos algún código en tiempo de compilación (en el constructor, probablemente) que agregue ese controlador al botón. Si está interesado en una respuesta más completa, consulte la fuente: D
Pero, ¿qué se puede usar con, por ejemplo, un
ListBox
para obtener un evento, se selecciona un elemento? ¿Dónde en la documentación puedo ver esto?
En la referencia de GWT API . En este caso, probablemente esté buscando ListBox.addChangeHandler . Pero generalmente no encontrará el código relacionado con @UiHandler
, es porque sería redundante. Siempre construye los métodos @UiHandler
la misma manera:
- Verifica
*Handler
el controlador que desea agregar, digamosChangeHandler
Tiene un
void onChange(ChangeEvent event)
- entonces, su método necesita un parámetroChangeEvent
y debe verse así:@UiHandler("listBox") void whateverName(ChangeEvent event) { // ... }
Empecé a estudiar el uso de GWT en combinación con UiBuilder. Estoy un poco desconcertado acerca de cómo puede usar la @UiHandler(..)
para hacer código de manejo de evento simple como está escrito en la documentación de GWT :
@UiHandler("button")
void handleClick(ClickEvent e) {
Window.alert("Hello, AJAX");
}
En este caso, se utiliza el método handleClick
. ¿Cómo sabe para cada widget de GWT qué métodos se pueden crear con @UiHandler
? Para algunos, también puedes crear un método doClose()
.
Pero, ¿qué se puede usar con, por ejemplo, un ListBox
para obtener un evento, se selecciona un elemento? ¿Dónde en la documentación puedo ver esto?
Probablemente su problema esté en su método onModuleLoad:
public void onModuleLoad()
{
HelloWorld helloWorld = new HelloWorld("BOTAO");
// Using this way @UiHandler will not work
//Document.get().getBody().appendChild(helloWorld.getElement());
// correct way
RootPanel.get().add(helloWorld);
}