【问题标题】:How to disable wicket's setRequired for certain cases如何在某些情况下禁用 wicket 的 setRequired
【发布时间】:2019-05-13 13:44:30
【问题描述】:

我对 wicket 还很陌生,刚刚遇到 setRequired。

我有 5 个文本字段

    final TextField<String> mfnField = new TextField<>("mfn",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getMfn()));
        form.add(mfnField);
        mfnField.setOutputMarkupId(true);
        form.add(new FdsInfoButton("mfn.infoButton", new ResourceModel("mfn.infoButton")));
        form.add(new FormComponentFeedbackPanel("mfnFeedbackPanel", mfnField));

final TextField<String> pbField = new TextField<>("pid",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getPBId()));
        form.add(pbField);
        pbField.setOutputMarkupId(true);
        form.add(new FormComponentFeedbackPanel("pidFeedbackPanel", pbField));

        final TextField<String> gpidField = new TextField<>("gpid",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getGpid()));
        form.add(gpidField);
        gpidField.setOutputMarkupId(true);
        form.add(new FormComponentFeedbackPanel("gpidFeedbackPanel", gpidField));

        final TextField<String> tidField = new TextField<>("tid",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getTransaction_id()));
        form.add(tidField);
        form.add(new FdsInfoButton("tid.infoButton", new ResourceModel("tid.infoButton")));
        form.add(new FormComponentFeedbackPanel("tidFeedbackPanel", tidField));
final TextField<String> ibanField = new TextField<>("iban",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getIban()));
        form.add(ibanField);
        ibanField.setOutputMarkupId(true);
        form.add(new FormComponentFeedbackPanel("ibanFeedbackPanel", ibanField));   

我有一个 fromfield 和一个 tofield:

final DateTimePicker fromInput = new DateTimePicker("from",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getFromDate()),
                DateTimePicker.START_OF_DAY);
        form.add(fromInput);
        form.add(new FormComponentFeedbackPanel("fromFeedbackPanel", fromInput));

        final DateTimePicker toInput = new DateTimePicker("to",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getToDate()),
                DateTimePicker.END_OF_DAY);
        form.add(toInput);
        form.add(new FormComponentFeedbackPanel("toFeedbackPanel", toInput));

在 5 个文本字段中:

  • 如果在前四个中输入了任何内容,那么我还需要输入 fromfield 和 tofield,因此 setRequired 应该为 true
  • 但是如果在 tidField 中输入了任何内容,无论其他文本字段为空还是填充,对于 frominput 和 toinput,setRequired 都应该为 false。

我的问题是如何设置真假。

或者除了 setRequired 之外还有什么我可以使用的吗?

【问题讨论】:

  • 我刚刚edited your question,改进了它的格式,或者its quality,以帮助人们理解您的问题,并帮助您获得适当的答案。但是您仍然需要添加更多信息才能解决您的问题。
  • 在我们有机会回答您之前,您的问题已经结束。看看 IFormValidator 类。您需要实现它并将abcde 列为依赖项,然后将其添加到表单中:myForm.add(new MyFormValidator()。这样,您将获得所有依赖项的值,您可以决定是通过验证还是失败。
  • @martin-g 我也尝试在 IFormValidator 中执行此操作,但它每次都会做出奇怪的反应,有时会显示错误消息,有时则不会。

标签: javascript java html user-interface wicket


【解决方案1】:

我找到了解决方案: 我必须使用 isRequired 而不是 setRequired

final DateTimePicker fromInput = new DateTimePicker("from",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getFromDate()),
                DateTimePicker.START_OF_DAY) {
            /**
             *
             */
            private static final long serialVersionUID = 1L;

            @Override
            public boolean isRequired() {
                return Strings.isBlank(tidField.getConvertedInput());
            }

        };
        form.add(fromInput);
        form.add(new FormComponentFeedbackPanel("fromFeedbackPanel", fromInput));

        final DateTimePicker toInput = new DateTimePicker("to",
                model(criteriaModel, on(RechercheServiceFunctionCriteria.class).getToDate()),
                DateTimePicker.END_OF_DAY) {

            /**
                     *
                     */
            private static final long serialVersionUID = 1L;

            @Override
            public boolean isRequired() {
                return Strings.isBlank(tidField.getConvertedInput());
            }
        };
        form.add(toInput);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 2012-07-07
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多