2012-02-24 11 views
5

In Tapestry5, ho due pulsanti di invio nel modulo e desidero anche eseguire l'evento di convalida, come posso ottenerlo? Questo è quello che sto cercando di fare:Tapestry5: gestione di più pulsanti di invio con evento di convalida del modulo

In 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> 

In 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() { 
} 

risposta

4

Come avete osservato, l'evento selected accade prima convalida, in modo da poter mettere il codice del gestore di azioni nei gestori di eventi per i pulsanti di invio. Tuttavia, è possibile memorizzare uno stato in questi metodi ed eseguire l'azione effettiva nel gestore eventi del modulo:

@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 { 
     ... 
    } 
} 
Problemi correlati