HTML5与Apache Wicket的可信和输入

sin*_*ina 0 html5 wicket wicket-1.6

我需要Apache Wicket应用程序中的可编辑文本.由于文本必须看起来非常"普通表",只有在用户双击文本后才进行编辑,依此类推,使用普通的TextFields并不是一个真正的选项.

所以我决定选择新的HTML5属性contenteditable,它可以很好地完成整个工作.使用以下标记和Java代码,我得到一个看起来像静态文本的标签,但在用户点击内部后,文本是可编辑的:

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

...

item.add(new Label("id", "dummy content"));
Run Code Online (Sandbox Code Playgroud)

但是现在我显然需要在用户实际编辑文本时捕获一些事件,因为新文本应该存储回数据库中.在线手册建议使用,oninput因为它似乎更可靠(例如关于时间问题)onkeyup,onkeydown等等.

使用常规HTML5尝试该事件可以正常工作:

<div wicket:id="id" contenteditable oninput='alert("oninput");'></div>
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,如何才能获得Wicket标签支持oninput?覆盖它并创建一个自定义标签将是一个非常好的解决方案(如果我真的必须),但为此我对Wicket来说太新了,知道从哪里开始以及如何创建正确的标记等等.

Mar*_*rst 5

由于a div不是表单元素,因此在发布表单时不会提交.所以你有两个选择:

  • 用内容onInput填充隐藏的表单元素并使用表单提交
  • 使用Ajax将内容发送到服务器

两者都要求你使用(Ajax)行为做一些魔术.

您可以使用Wicket的HiddenField创建隐藏字段,并onInput执行HiddenField值的更新.

您可以ContentEditableFormComponent通过使用FormComponentPanel作为起点创建自己来封装它.