gpt4 book ai didi

java - 如果 Wicket 表单组件设置为 "required"是否可以动态更改?

转载 作者:行者123 更新时间:2023-11-29 09:24:01 25 4
gpt4 key购买 nike

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

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);
}
}
});

如果 productInput 未设置为必需,则每次列表从选择某个值到选择空行选项时都会命中断点。如果将其设置为必需,则永远不会命中断点。


如果 Wicket 表单组件正在使用 setRequired(true); 进行验证,是否有可能动态地/AJAX-ishly 更改它?这是一个简单的(如果是人为的)示例来说明我的意思:

加油站的免下车洗车店通常提供三级或四级服务。每一个都包括较低级别提供的所有内容,并在一层蜡或额外的漂洗或其他东西上添加。用于洗涤的 UI 通常有四个按钮,旁边有灯 (example)。当用户按下其中一个按钮时,相应的灯会亮起,同时所有便宜级别的灯也会亮起;更好水平的灯关闭。该行为由以下代码建模:

boolean economy, standard, deluxe, ultimate = false;

CheckBox economyBox = new CheckBox("economyBox",
new PropertyModel<Boolean>(this, "economy"));
// Similar declarations for standardBox, deluxeBox and ultimatebox

OnChangeAjaxBehavior standardChangeListener = new OnChangeAjaxBehavior() {
protected void onUpdate(AjaxRequestTarget target)
{
// If "standard" is activated, also turn on the "economy" light
if (standard)
{
economy = true;
target.addComponent(economyBox);
}
// If "standard" is deactivated, deactivate "deluxe" and "ultimate"
else if (!standard)
{
deluxe = false;
ultimate = false;
target.addComponent(deluxeBox);
target.addComponent(ultimateBox);
}
}
};
standardBox.add(standardChangeListener);
// Similar listeners declared for the other three checkboxes

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

最佳答案

我看不出这里有什么问题,除了你有

        target.addComponent(standardBox);

我认为你想要的地方

        target.addComponent(economyBox);

验证应该与 OnChangeAjaxBehavior 互操作就好了。我很确定我已经以某些形式使用了这两种形式,但我认为没有使用复选框。

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

更明智的验证可能是必须检查某物,但这需要为整个表单定义不同的 validator ,或者为包含的FormComponent你所有的复选框。

编辑:根据您对 DropDownChoice 发现相同问题的编辑,我做了一个实验。

有一个 AjaxFormComponentUpdatingBehaviorDropDownChoice 组件的例子 here .我为此下载了代码,添加了

    models.setRequired(true);
makes.setRequired(true);
add(new FeedbackPanel("messages"));

当然还有为反馈面板添加的标记。

它验证了必填字段并继续根据 make 下拉列表的值更新模型下拉列表。

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

关于java - 如果 Wicket 表单组件设置为 "required"是否可以动态更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4160153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com