J'ai un problème avec ListView et la validation sur la page.Apache wicket: comment mettre à jour le formulaire explicitement?
J'ai ListView, et en dessous il y a TextField, où l'utilisateur peut entrer des valeurs. J'ai des boutons "publier" et "brouillon" sur ma page. Publier est un bouton, où popup (ModalWindow) est affiché, où l'utilisateur doit confirmer les données saisies. Enregistrer le brouillon est en cours d'enregistrement sans confirmation. Les deux sont des objets SecuredAjaxLink.
Lorsqu'un utilisateur entre des données dans TextField, il est enregistré dans ListView, mais la liste entière n'est pas mise à jour car l'utilisateur doit appuyer sur le bouton Ajouter ci-dessous. C'est acceptable.
Le problème est, que j'ai la validation métier, où les informations entrées par l'utilisateur sont vérifiées pour certaines règles. Lorsque la validation échoue tous les champs (contenant des informations erronées) sont mis en évidence avec css. Pour ajouter explicitement la valeur de TextField à ListView, je fais
target.addComponent(form);
Ceci est effectué avant que les données ne soient validées. Donc, tous les champs sont mis à jour. Cela fonctionne très bien pour le bouton de publication (avec la confirmation ModalWindow), mais ne fonctionne pas avec le lien sans popup. Si je comprends bien, il y a quelque chose qui cloche avec le cycle de vie de la cible, mais je suis coincé avec elle.
Peut-être que quelqu'un avait quelque chose de similaire ou connaissait la réponse?
Comment puis-je mettre à jour la page sans utiliser de popup?
Voici le code: Projet de lien:
add(new SecuredAjaxSubmitLink(LinkNames.savelaterLink.toString(), form,
RoleController.CONTROLLER.getAccessController()) {
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
target.addComponent(form);
insert(appl, false, form, target, new MainMenu(getString("accept.application.draft.success.message")), trail, checkbox);
}
Publier lien:
add(new CustomAjaxSubmitLink(LinkNames.submitLink.toString(), form,
RoleController.CONTROLLER.getAccessController()) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
target.addComponent(form);
publishPopup.show(target);
}
});
publishPopup.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
public void onClose(AjaxRequestTarget target) {
if (ApplicationInsertActionPanel.this.getSelectedAction() != null
&& ApplicationInsertActionPanel.this.getSelectedAction().equals(Action.CONFIRM)) {
insert(appl,
true,
form,
target,
new MainMenu(ApplicationInsertActionPanel.this
.getString("accept.application.publish.success.message")), trail, checkbox);
}
}
});
J'ai ajouté
@Override
protected void onError(final AjaxRequestTarget target, Form<?> form)
{
super.onError(target, form);
target.addComponent(form);
à mon projet de lien, mais la page est pas entièrement mis à jour. Je suppose que c'est parce que le cycle de vie de la cible n'est pas terminé, comme s'il se terminait lorsque j'utilise une fenêtre contextuelle. La fenêtre contextuelle ouvre une "nouvelle page" et l'ancienne cible peut être mise à jour, mais lorsque je n'utilise pas de popup, la page reste comme avant. Donc maintenant je pense à une solution de contournement pour mettre fin au cycle de vie cible. Je pensais à la fenêtre contextuelle transparente sans aucune fonctionnalité, mais est vraiment une solution très sale.
Des idées? Merci! }
Pouvez-vous montrer du code? – bert
Modifié premier message. – psisoyev