【问题标题】:Wicket: Create control that swaps between a TextBox and a LabelWicket:创建在 TextBox 和 Label 之间交换的控件
【发布时间】:2017-08-23 21:36:25
【问题描述】:

我有一个具有编辑状态和视图状态的面板。我需要一个基于面板状态在 TextField 和 Label 之间切换的控件。例如,在编辑状态下,Panel 将显示为 TextField,而在视图状态下,同一字段将显示为 Label。

这与AjaxEditableLabel 非常相似,但又不一样。我正在同时将表单中的多个标签更改为文本字段。

除了交换控件,我还想继续利用wicket:for。这是一个建议的标记示例:

<label wicket:for="firstNm"><wicket:message key="firstNm" /></label><br />
<span wicket:id="firstNm"></span>

我希望能够继续向 TextField 添加 HTML 属性。可以从 onComponentTag 中的 span 标签复制它们。例如:

<span wicket:id="firstNm" maxlength="30"></span>

...可以在编辑模式下呈现以下内容:

<input type="text" maxlength="30" />

我也看过 ViewOrEdit control in visural-wicket,但我认为它不适用于 wicket:for。

【问题讨论】:

  • 你知道吗,TextField(和family)有setEnable(false),差不多就是Label了?
  • 是的,我做到了。我之前考虑过只使用 CSS,但我没有将它与禁用字段结合起来。这很有帮助,但我认为它不会完全起作用。我必须为不仅仅是一个 TextField 实现一个解决方案。对于 DropDownChoice 和单选按钮,我需要同样的东西。在单选按钮的情况下,仅显示选定的值,因此 CSS 技巧并不那么简单。

标签: wicket wicket-7


【解决方案1】:

您可以使用 Wicket Fragment 容器来执行此操作。在标记中定义两个片段,分别为inputspan。在 Java 代码中,根据您的条件添加具有不同第二个参数的 Fragment。 TextField 和 Label 应该共享相同的模型以显示相同的文本。

【讨论】:

  • 这种方法似乎非常接近 ViewOrEdit 控件(链接在我的问题中)。有什么我不理解的不同之处吗?此外,我实现了一个类似于 ViewOrEdit 控件的模式,发现交换工作正常,并且我的标签在出错时变为红色,但我的必填字段指示器丢失了。 ViewOrEdit 控件似乎比我想象的更接近。
  • 我的必填字段指示器的问题是我在 TextField 而不是 ViewOrEdit 控件上设置了 required。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2016-08-08
  • 2011-12-21
  • 1970-01-01
相关资源
最近更新 更多