2012-02-24 32 views
5

En Tapestry5, tengo dos botones de envío en el formulario y deseo realizar el evento Validación también, ¿cómo puedo lograr eso? Esto es lo que estoy tratando de hacer:Tapestry5: manejo de múltiples botones de envío con evento de validación de formulario

En page.tml

<form t:type="form" t:id="verifyCreateExampleModelForm"> 

    <input class="btsubmit" t:type="submit" t:id="saveAsAwaitingCompletion" > 
    <input class="btsubmit" t:type="submit" t:id="saveAsCreated"> 
</form> 

En page.class

@OnEvent(value = EventConstants.VALIDATE_FORM, component = "verifyCreateExampleModelForm") 
private Object validation() { 
    if (StringUtils.isEmpty(modelTypeName)) { 
     verifyCreateExampleModelForm.recordError("incorrectmodelTypename")); 
     this.isAllowed = false; 
    } 
} 

@OnEvent(component = "saveAsAwaitingCompletion", value = "selected") 
private void onSaveAsAwaitingCompletion() { 
} 

@OnEvent(component = "saveAsCreated", value = "selected") 
private void onSaveAsCreated() { 
} 

Respuesta

4

Como se ha observado, el evento selected ocurre antes de la validación, por lo que puede Ponga su código de controlador de acción en los controladores de eventos para los botones de envío. Sin embargo, puede almacenar un estado en esos métodos y realizar la acción real en el controlador de eventos de formulario:

@OnEvent(component = "saveAsAwaitingCompletion", value = EventConstants.SELECTED) 
void saveAsAwaitingCompletionClicked() { 
    this.action = AWAITING_COMPLETION; 
} 

@OnEvent(component = "saveAsCreated", value = EventConstants.SELECTED) 
void saveAsCreatedClicked() { 
    this.action = CREATED; 
} 

... //validation logic etc. 

@OnEvent(component="verifyCreateExampleModelForm" value = EventConstants.SUCCESS) 
void save() { 
    if (this.action == AWAITING_COMPLETION) { 
     ... 
    } else { 
     ... 
    } 
} 
Cuestiones relacionadas