1

我正在创建一个表单,其中只有在选中某个复选框时才应启用某些文本字段。

我对 Wicket 很陌生,我对以下内容很好奇:

  1. 我是否可以使用现有的 Wicket 类在没有 (AJAX) 往返服务器的情况下启用/禁用该字段?即是否可以将行为添加到导致呈现的 HTML 包含启用/禁用字段的 JavaScript 的字段?

  2. 如果上述问题的答案是否定的:我自己在标记中添加所需的 JavaScript 代码是否“合法”?或者我是否冒着弄乱表单提交的风险,以至于 Wicket 无法正确识别它?

我是 Wicket 的新手,我不确定这里的最佳做法是什么。也许这样做的 Wicket 方式总是涉及 AJAX 往返?

4

2 回答 2

2

我是否可以使用现有的 Wicket 类在没有 (AJAX) 往返服务器的情况下启用/禁用该字段?即是否可以将行为添加到导致呈现的 HTML 包含启用/禁用字段的 JavaScript 的字段?

是的,你可以在没有服务器往返的情况下做到这一点。不,不是 Wicket 提供的课程,您必须自己创建。这是您可以添加到组件的行为。如果点击了具有这种行为的组件,那么在构造函数中传递的目标组件将通过 javascript 被禁用:

public class DisableFormComponentBehavior extends Behavior {

private Component sourceComponent;

private FormComponent targetComponent;

public DisableFormComponentBehavior(FormComponent targetComponent) {
    targetComponent.setOutputMarkupId(true);
    this.targetComponent = targetComponent;
}

public void bind(Component component) {
    super.bind(component);
    component.setOutputMarkupId(true);
    this.sourceComponent = component;
}

@Override
public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(JavaScriptHeaderItem
            .forReference(JQueryResourceReference.get()));
    response.render(OnDomReadyHeaderItem.forScript(String
            .format("$('#%s').click(function(){$('#%s').prop('disabled', true);});",
                    component.getMarkupId(), targetComponent.getMarkupId())));
}

}

如果上述问题的答案是否定的:我自己在标记中添加所需的 JavaScript 代码是否“合法”?或者我是否冒着弄乱表单提交的风险,以至于 Wicket 无法正确识别它?

好吧,上述问题的答案不是“否”,但是将您自己的 javascript 添加到 Wicket html 文件中仍然是完全合法的。但是,您必须在 HTML 中定义组件的 ID。不过,我更喜欢 Behaviors 的解决方案,因为它更易于重用。

于 2013-07-11T20:38:37.453 回答
0

无需调用服务器,这绝对是可行的。一些非常基本的客户端 Javascript / jQuery 会做你想做的事。看看这里,用你的复选框代替下拉菜单。

于 2013-07-11T17:41:28.027 回答