Básicamente tengo un menú donde no puede hacer clic en los encabezados, pero cuando pasa el puntero sobre el elemento del menú, puede seleccionar uno de los elementos desplegables. Cada uno de los elementos son g: etiquetas de ancla con ui campos asociados a ellos. Lo que esperaría que sucediera, es que cuando un usuario hace clic en uno de los elementos desplegables, mi uiHandler para ese campo se activaría. Incluso con la depuración y un punto de interrupción, nunca llega.GWT UiHandler para g: el ancla no está disparando
A continuación encontrará las principales áreas de preocupación en el código. Solo publicaré mis importaciones de gwt aquí, ya que se puede suponer que el resto es correcto debido a cero errores.
He aquí un fragmento de XML para tener una idea de lo que está pasando
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:cpcw='urn:import:org.collegeboard.pa.gwt.client.widget'>
<cpcw:ExtendedHTMLPanel>
<ul>
<li ui:field="juniorHigh"><g:Anchor href="">Junior High</g:Anchor>
<ul>
<li><g:Anchor href="#" ui:field="juniorHighFall">Fall</g:Anchor></li>
<li><g:Anchor href="#" ui:field="juniorHighSpring">Spring</g:Anchor></li>
<li><g:Anchor href="#" ui:field="juniorHighSummer">Summer</g:Anchor></li>
</ul>
</li>
</ul>
</cpcw:ExtendedHTMLPanel>
</ui:UiBinder>
Y entonces aquí son las piezas de mi clase Java
importaciones
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.LIElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Anchor;
Ui campos
@UiField
protected LIElement juniorHigh;
@UiField
protected Anchor juniorHighFall;
@UiField
protected Anchor juniorHighSpring;
@UiField
protected Anchor juniorHighSummer;
Ui Handler
@UiHandler({"juniorHighFall","juniorHighSpring","juniorHighSummer"})
public void handleMenuClick(ClickEvent event)
{
DisplayUtil.displayAlertMessage(event.toString());
}
Inicializar
@Override
public void initializeBinder()
{
initWidget(ourUiBinder.createAndBindUi(this));
}
Ahora, el UiHandler realidad nunca es golpeado. He tenido las etiquetas g: Anchor con y sin href, y también las he probado como g: Hipervínculo y g: Botón sin éxito. Es como si el UiHandler ni siquiera estuviera allí.
Cualquier ayuda sería muy apreciada, y también si crees que necesitarías algo más para solucionar problemas, ¡házmelo saber!
Gracias :-)
EDIT:
sólo para asegurarse de que esto era clara, el archivo de plantilla ui.xml que contenía este archivo ui.xml fue colocando esto en un div. Cuando reemplacé eso con un SimplePanel, todo funcionó con UiHandler.
Gracias por las respuestas!
Sí, son clases personalizadas, y voy a comenzar a investigar en ellas para ver si hay algo funky pasando con ellos. ¡Gracias por la tranquilidad de que el código debería funcionar, porque eso me estaba volviendo loco! ¡También daré una oportunidad a SimplePanel para ver si eso funciona! ¡Gracias por la respuesta! –
Además, me gustaría revocar esto, pero aún no tengo la suficiente reputación aquí para hacerlo ... (╯ ° □ °) ╯(┻━┻ –
El SimplePanel hizo el truco! En la plantilla xml que contiene este ExtendedHTMLPanel, los elementos eran divs. Cambié los divs a SimplePanels y todos los UiHandlers funcionan correctamente. Todavía no tengo la reputación suficiente para expresar tu respuesta, ¡pero gracias! :) –