Come posso fare WebFlow abort la transizione e basta visualizzare la pagina precedente quando la validazione fallisce?
-
26-09-2019 - |
Domanda
Ho un app primavera WebFlow che mi provoca capelli grigi. Quello che sto cercando di realizzare se la convalida ha esito positivo è quello di mostrare semplicemente la stessa vista con dati diversi. Questo funziona. Tuttavia, quando vengono inseriti dati non validi, voglio mostrare alla vista precedente, ma con i valori errati preriempita ei messaggi di errore dicendo il mio utente come risolvere l'errore precedente. Tuttavia, indipendentemente dal fatto che la convalida ha esito positivo o meno, l'applicazione fa ancora la on-render
roba dentro. Dal momento che i valori non sono validi, si blocca la mia app. Come posso fare le cose on-render
solo quando la validazione ha successo?
Il mio config sullo stato di visualizzazione sembra un po 'come questo:
<view-state id="mine" model="myModel">
<var name="myModel" class="com.examplelMyModel" />
<on-entry>
<set name="foo" value="bar" />
</on-entry>
<on-render>
<set name="requestScope.stuff" value="stuffService.loadStuff( ... )" />
<set name="viewScope.otherStuff" value="otherStuffService.loadOtherStuff( requestScope.stuff, myModel.a, myModel.b )" />
</on-render>
<transition on="reloadMine" validate="true"/>
</view-state>
I miei sguardi validatore come questo:
public class MyModelValidator{
...
public void validateMine(MyModel myModel, ValidationContext context) {
Locale currentLocale = LocaleContextHolder.getLocale();
MessageContext messages = context.getMessageContext();
DateTime a= new DateTime(myModel.getA());
DateTime a = new DateTime(myModel.getB());
DateTime now = new DateTime();
if(a.isAfter(now) || b.isAfter(now)){
messages.addMessage(new MessageBuilder().error().defaultText(messageSource.getMessage("ohno", null, currentLocale)).build());
}
}
}
}
Soluzione
on-renderizzare viene richiamato quando la pagina viene effettivamente trasmesso indietro per l'utente. Per essere in grado di mostrare eventuali errori di convalida si avrà alla pagina di ri-renderizzare, e così via, il rendering viene richiamato. Non si può mettere insieme quelli di due all'interno del tag on-entry?