0

Apache Wicket アプリケーションで編集可能なテキストが必要です。テキストは、ユーザーがテキストをダブルクリックした後にのみ編集するなど、非常に「共通のテーブルのよう」に表示する必要があるため、通常の TextField を使用することは実際にはオプションではありません。

そこで、新しい HTML5 属性を使用することにしましたcontenteditable。これは、全体的な仕事を非常にうまく行います。次のマークアップと Java コードを使用すると、静的テキストのように見えるラベルを取得できますが、ユーザーがテキスト内をクリックすると編集可能になります。

<div wicket:id="id" contenteditable></div>

...

item.add(new Label("id", "dummy content"));

しかし、新しいテキストをデータベースに保存する必要があるため、ユーザーが実際にテキストを編集したときに何らかのイベントをキャッチする必要があることは明らかです。オンライン マニュアルではoninput、(タイミングの問題などに関して) よりも信頼性が高いと思われるためonkeyup、などを使用することをお勧めしonkeydownます。

通常の HTML5 でイベントを試すと、問題なく動作します。

<div wicket:id="id" contenteditable oninput='alert("oninput");'></div>

私の質問は、Wicket ラベルをサポートするにはどうすればよいoninputですか? それをオーバーライドしてカスタム ラベルを作成することは、(本当に必要な場合) まったく問題のない解決策ですが、そのためには、Wicket に慣れていないため、どこから始めて正しいマークアップを作成するかなどを知ることができません。

4

1 に答える 1

6

adivはフォーム要素ではないため、フォームを投稿しても送信されません。したがって、次の 2 つのオプションがあります。

  • 非表示のonInputフォーム要素にコンテンツを入力し、フォームを使用して送信します
  • Ajax を使用してコンテンツをサーバーに送信する

どちらも、(Ajax)Behavior を使用していくつかの魔法を行う必要があります。

Wicket のHiddenFieldを使用して隠しフィールドを作成しonInput、HiddenField の値の更新を実行できます。

FormComponentPanelを開始点としてContentEditableFormComponent使用して独自のものを作成することで、これをカプセル化できます。

于 2013-10-24T11:02:30.987 に答える