Java 如果Wicket表单组件';s设为“s”;“必需”吗;?

Java 如果Wicket表单组件';s设为“s”;“必需”吗;?,java,ajax,wicket,Java,Ajax,Wicket,编辑: 这个问题最初是关于复选框的,但我在下拉列表中得到了相同的行为。守则: productInput = new DropDownChoice<String>("productInput", new PropertyModel<String>(this, "productSelection"), prod

编辑:
这个问题最初是关于复选框的,但我在下拉列表中得到了相同的行为。守则:

productInput = new DropDownChoice<String>("productInput",
                                          new PropertyModel<String>(this, "productSelection"),
                                          products);

productInput.add(new AjaxFormComponentUpdatingBehavior("onchange") {
    @Override
    protected void onUpdate(AjaxRequestTarget target)
    {
        if (productSelection == null) // Breakpoint is set on this line
        {
            updateDropdownsAfterFieldDisabled(1, target);
        }
        else
        {
            updateDropdownsAfterFieldEnabled(1, target);
        }
    }
});

我已经测试了这段代码——好的,这是一个简化版本的真实代码——并且它按照预期工作。但是add-in
economyBox.setRequired(true)和框停止动态更新。有没有一种方法可以在不破坏“链接复选框”行为的情况下添加验证?

我看不出这里有任何错误,除非您有

        target.addComponent(standardBox);
我想你想去的地方

        target.addComponent(economyBox);
验证应该与
OnChangeAjaxBehavior
进行互操作。我很确定我已经在某些形式中使用了这两种方法,尽管我认为不是用复选框

我不确定使用
economyBox.setRequired(true)进行验证的想法在这里是有意义的。在您的模型中,您正在提供值,所有复选框的默认值都为false,因此在这个上下文中没有真正的方法可以忽略任何内容

更合理的验证可能是必须选中某个内容,但这需要为整个表单或包含所有复选框的
表单组件定义不同的验证器

编辑: 根据您关于在
DropDownChoice
中看到相同问题的编辑,我做了一个实验

有一个使用
DropDownChoice
组件的
ajaxFormComponentUpdateBehavior
示例。我下载了这个的代码,补充道

    models.setRequired(true);
    makes.setRequired(true);
    add(new FeedbackPanel("messages"));
当然,还为反馈面板添加了标记

它验证了所需字段,并根据make下拉列表的值继续更新model下拉列表


由于这对我来说很好,我建议您尝试同样的方法,看看它是否有效,然后与您的代码进行比较。

除了您的代码之外,我看不出有任何错误

        target.addComponent(standardBox);
我想你想去的地方

        target.addComponent(economyBox);
验证应该与
OnChangeAjaxBehavior
进行互操作。我很确定我已经在某些形式中使用了这两种方法,尽管我认为不是用复选框

我不确定使用
economyBox.setRequired(true)进行验证的想法在这里是有意义的。在您的模型中,您正在提供值,所有复选框的默认值都为false,因此在这个上下文中没有真正的方法可以忽略任何内容

更合理的验证可能是必须选中某个内容,但这需要为整个表单或包含所有复选框的
表单组件定义不同的验证器

编辑: 根据您关于在
DropDownChoice
中看到相同问题的编辑,我做了一个实验

有一个使用
DropDownChoice
组件的
ajaxFormComponentUpdateBehavior
示例。我下载了这个的代码,补充道

    models.setRequired(true);
    makes.setRequired(true);
    add(new FeedbackPanel("messages"));
当然,还为反馈面板添加了标记

它验证了所需字段,并根据make下拉列表的值继续更新model下拉列表


由于这对我来说效果很好,我建议您尝试同样的方法,看看它是否有效,然后与您的代码进行比较。

它以何种方式停止工作?@Don它不再受其他复选框状态的影响。它以何种方式停止工作?@Don它不再受其他复选框状态的影响。您的打字错误是正确的。我很聪明,用Eclipse的重构工具创建了这个示例,但后来我为了缩短文章而复制/粘贴,破坏了它。现在已经修复了。除了输入错误,我发现对于带有
setRequired(true)
的复选框,验证器不接受
false
。也许我遗漏了一些关于
PropertyModel
如何工作/将事物联系在一起的基本知识?事实上,我同意更好的验证器应该是“确保某些东西被检查”,但我也不知道如何使其工作,我想我应该从一个更简单的问题开始。这里有一些示例代码可能有助于理解如何进行验证。是的,我已经玩过
AbstractValidator
一些;你的编辑很有趣,有点伤感,因为这就是我开始使用的代码。我再看看。我想我现在会接受这个,祝贺《无名英雄》(一周后)。你的打字错误是对的。我很聪明,用Eclipse的重构工具创建了这个示例,但后来我为了缩短文章而复制/粘贴,破坏了它。现在已经修复了。除了输入错误,我发现对于带有
setRequired(true)
的复选框,验证器不接受
false
。也许我遗漏了一些关于
PropertyModel
如何工作/将事物联系在一起的基本知识?事实上,我同意更好的验证器应该是“确保某些东西被检查”,但我也不知道如何使其工作,我想我应该从一个更简单的问题开始。这里有一些示例代码可能有助于理解如何进行验证。是的,我已经玩过
AbstractValidator
一些;你的编辑很有趣,有点伤感,因为这就是我开始使用的代码。我再看看。我想我现在会接受这个,祝贺无名英雄(一周后)。