ページの ListView と検証に問題があります。
ListView があり、その下にユーザーが値を入力できる TextField があります。ページに「公開」ボタンと「下書き保存」ボタンがあります。発行は、ユーザーが入力したデータを確認するためのポップアップ (ModalWindow) が表示されるボタンです。下書き保存は確認せずに保存しています。どちらも SecuredAjaxLink オブジェクトです。
ユーザーが TextField にデータを入力すると、ListView に保存されますが、ユーザーが下の [追加] ボタンを押す必要があるため、リスト全体は更新されません。これで結構です。
問題は、ユーザーが入力した情報がいくつかのルールでチェックされるビジネス検証があることです。検証が失敗すると、すべてのフィールド (間違った情報を含む) が css で強調表示されます。TextField から ListView に値を明示的に追加するには、私はやっています
target.addComponent(form);
これは、データが検証に進む前に実行されます。したがって、すべてのフィールドが更新されます。これは公開ボタン (確認用の ModalWindow) では問題なく機能しますが、ポップアップのないリンクでは機能しません。私が理解しているように、ターゲットのライフサイクルに何か問題がありますが、私はそれで立ち往生しています。
多分誰かが似たようなことをしたか、答えを知っていますか?
ポップアップを使用せずにページを更新するにはどうすればよいですか?
コードは次のとおりです: ドラフトリンク:
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);
}
リンクを公開:
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);
}
}
});
私は追加しました
@Override
protected void onError(final AjaxRequestTarget target, Form<?> form)
{
super.onError(target, form);
target.addComponent(form);
下書きリンクに移動しましたが、まだページは完全には更新されていません。ポップアップウィンドウを使用しているときに終了するように、ターゲットのライフサイクルが終了していないためだと思います。ポップアップウィンドウが「新しいページ」を開き、古いターゲットを更新できますが、ポップアップを使用していないときは、ページはそのままです。だから今、ターゲットのライフサイクルを終了するための回避策を考えています。機能のない透明なポップアップ ウィンドウについて考えていましたが、実際には非常に汚いソリューションです。
何か案は?ありがとう!}