Pregunta

Tengo un AjaxPagingNavigator. Básicamente en una determinada condición, la lista de los que se vuelven a cargar las páginas AjaxPagingNavigator. Cuando esto sucede sólo quiero hacer que el navegador cuando la lista contiene más de 1 página.

Así que ¿alguien sabe donde puedo adjuntar un controlador para que pueda comprobar si hay una condición de visibilidad en mi AjaxPagingNavigator y activar / desactivar la visibilidad de manera que cuando se actualiza el navegador a través. Ajax es visible o no?

Marcado:

<div wicket:id="mainWrap">
    <div wicket:id="navigator"/>
    <div wicket:id="listWrap">
        <div wicket:id="list><!-- here be content --></div>
    </div>
</div>

Así que tengo un evento ajax que refresca "mainWrap" que refresca el "navegador", junto con la "lista" y envolturas.

este es el evento que desencadena todo el asunto.

 protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
     List foo = null; // do work to get list
     model.setFound(found); // update the model (thus updating "list")
     target.addComponent(mainWrap);
}

Edit: Yo sé que puedo escribir

navigator.setVisibility(list.getPageCount() > 1);

después de crear el navegador y después de la actualización del modelo, pero yo estaba esperando para encapsular que en una subclase de AjaxPagingNavigator.

¿Fue útil?

Solución

Tenga cuidado con hacer cálculos costosos en un método isVisible reemplazado, como Wicket llamará isVisible varias veces por solicitud, sin contar las llamadas, es posible hacer sin darse cuenta.

Por lo general la mejor manera de hacer esto es para anular onConfigure y establecer el indicador de visibilidad manualmente.

@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}

onConfigure se llama sólo una vez durante el proceso de peticiones, y llama para todos los componentes, incluyendo aquellos que son invisibles (mientras onBeforeRender sólo se le llama para los componentes visibles).

Otros consejos

Ha sido un tiempo desde que tocó Wicket, pero si falla la memoria:

No se puede reemplazar el método isVisible () del objeto "navegador", de tal manera que sólo se muestra bajo la condición de que usted desea?

por ejemplo. algo así como

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top