質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Wicket

Apache Wicketは、Java向けのWebアプリケーションフレームワークです。記述を少なくして効率化する他のフレームワークとは違い、Javaのオブジェクト指向言語としての機能を最大限に活用できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

2321閲覧

キャンセルのときのみセレクトボックスの値を戻す

naomi3

総合スコア1105

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Wicket

Apache Wicketは、Java向けのWebアプリケーションフレームワークです。記述を少なくして効率化する他のフレームワークとは違い、Javaのオブジェクト指向言語としての機能を最大限に活用できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2019/05/08 15:18

Wicketでセレクトボックスが変更されたときに確認ダイアログを表示して、「キャンセル」がクリックされたときには、自動的に元の状態を自動的に復元したいです。
タイマーを使って、保持している値を再設定することで実現はできましたが、この方法は問題があります。

・タイマーの更新時にユーザーがセレクトボックスを変更しようとすると、ユーザー操作を妨害します。
・このセレクトボックスインスタンスを大量に使うので、重い。

何か良い代替案はないか、皆様の知恵をお借りしたいです。

HTML

1<!DOCTYPE html> 2<html xmlns:wicket="http://wicket.apache.org"> 3<wicket:panel> 4 <tr wicket:id="indicatingRow"> 5 <select class="indicatingStatus" wicket:id="indicatingStatus"> 6 <option value="none"></option> 7 <option value="underModification">対処中</option> 8 <option value="modified">対処済</option> 9 <option value="underVerification">確認中</option> 10 <option value="suspended">保留</option> 11 <option value="completed">完了</option> 12 </select> 13 </td> 14 </tr> 15</wicket:panel> 16</html>

Java

1// IndicationBean 2 public enum Status { 3 none(""), 4 underModification("対処中"), 5 modified("対処済"), 6 underVerification("確認中"), 7 suspended("保留"), 8 completed("完了"); 9 10 private String text = ""; 11 private Status(String text) { 12 this.text = text; 13 } 14 public String getText() { 15 return text; 16 } 17 public String getName() { 18 return name(); 19 } 20 @Override 21 public String toString() { 22 return (this == none ? "none" : getText()); 23 } 24 } 25 26 public static final ArrayList<Status> INDICATING_STATUSES = new ArrayList<Status>() {{ 27 add(Status.none); 28 add(Status.underModification); 29 add(Status.modified); 30 add(Status.underVerification); 31 add(Status.suspended); 32 add(Status.completed); 33 }};

Java

1 DropDownChoice<IndicationBean.Status> statusChoice = 2 new DropDownChoice<IndicationBean.Status>("indicatingStatus", 3 Model.of(bean.getStatus()), 4 IndicationBean.INDICATING_STATUSES, 5 new ChoiceRenderer<IndicationBean.Status>("text", "name")); 6 indicatingRow.add(statusChoice.setOutputMarkupId(true)); 7 8 statusChoice.add(new AjaxFormComponentUpdatingBehavior("change") { 9 @Override 10 protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { 11 AjaxCallListener callListener = new AjaxCallListener(); 12 callListener.onPrecondition("return confirm('ステータスを更新しますか?');"); 13 attributes.getAjaxCallListeners().add(callListener); 14 super.updateAjaxAttributes(attributes); 15 } 16 17 @Override 18 protected void onUpdate(AjaxRequestTarget target) { 19 IndicationBean.Status status = statusChoice.getModelObject(); 20 log.info("statusChoice:change IndicatingStatus={}({})", status, status.ordinal()); 21 bean.setStatus(status); 22 } 23 }); 24 25 statusChoice.add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) { 26 @Override 27 protected void onTimer(AjaxRequestTarget target) { 28 log.trace("statusChoice:onTimer"); 29 // 「ステータス」セレクトボックスの更新が「キャンセル」されたとき、元に戻す。 30 IndicationBean.Status status = bean.getStatus(); 31 statusChoice.setModelObject(status); 32 33 target.add(statusChoice); 34 } 35 });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

javascript

1 2const M = new Map; 3 4function hoge ({type, target: e}) { 5 switch (type) { 6 case 'focus' : 7 if ('classList' in e) 8 if (e.classList.contains ('indicatingStatus')) 9 M.set (e, e.value); 10 break; 11 12 case 'change' : 13 confirm ('変更してもOK?') 14 ? M.set (e, e.value) 15 : e.value = M.get (e); 16 break; 17 } 18} 19 20document.addEventListener ('focus', hoge, false); 21document.addEventListener ('change', hoge, true); 22

投稿2019/05/08 20:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naomi3

2019/05/10 13:02

おかげで回答を導けました。ありがとうございました。
guest

0

自己解決

hai_haiさんのfocusとchangeイベントを使うご回答から、changeとblurイベントを使って、保存してある状態を戻す方法を思いつき、正しく動作しました。hai_haiさんありがとうございました。

Java

1 statusChoice.add(new AjaxFormComponentUpdatingBehavior("blur") { 2 @Override 3 protected void onUpdate(AjaxRequestTarget target) { 4 log.info("statusChoice#{}:blur", bean.getNo()); 5 // 「ステータス」セレクトボックスの更新が「キャンセル」されたとき、元に戻す。 6 IndicationBean.Status status = bean.getStatus(); 7 statusChoice.setModelObject(status); 8 9 target.add(statusChoice); 10 } 11 });

投稿2019/05/10 13:01

naomi3

総合スコア1105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問