gpt4 book ai didi

java - WICKET:控制更改 CheckBox 时组件的可见性

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:09 26 4
gpt4 key购买 nike

我正在使用 wicket 框架。

有谁知道如何通过点击checkBox组件来控制表单中组件的可见性,以及如何在提交表单时获取复选框状态的 boolean 值(true或false,取决于选中与否)。
我想做这样的事情:

TextField nameField = new TextField("name");

public StateDB() {
final AjaxCheckBox searchByFio = new AjaxCheckBox("searchByFio", new PropertyModel(this, "checkBoxValue")) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
nameField.setVisible(checkBoxValue);
target.add(nameField);
}
};

Form form = new Form("form");

nameField.setOutputMarkupPlaceholderTag ( true );
form.add(nameField);
add(form);
}

但结果不是我所期望的。它只是像这样更改 html 元素
来自:

<input type="text" wicket:id="lastName" id="lastName" required="" value="" name="lastName">


收件人:

<input id="lastName" style="display:none">

反之亦然

最佳答案

要通过单击复选框来更新任何组件的可见性,您可以使用“AjaxCheckBox”,例如:

//somewhere in the class create model variable:
boolean checkBoxValue = true;

//this is your hideable component
Label someComponent;

...
//and add PropertyModel for checkbox:
AjaxCheckBox checkBox = new AjaxCheckBox("checkBox", new PropertyModel(this, "checkBoxValue")) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
//if checkbox is checked, then our component is shown
someComponent.setVisible(checkBoxValue);
target.add(someComponent);
}
};

...
//this is your component to update
someComponent = new Label("someComponent", "some text");

//this method allows you to hide/show component with ajax updates.
someComponent.setOutputMarkupPlaceholderTag ( true );

要在提交后获得复选框值 - 您可以检查您的 checkBoxValue 值。

更新

实际上,您可以覆盖可隐藏组件方法 onConfigure() 以根据“checkBoxValue”设置其可见性(这只是获得此功能的另一种方式,可能更可取):

   someComponent = new Label("someComponent", "some text")
{
@Override
protected void onConfigure() {
setVisible ( checkBoxValue );
}
};

如果您这样做,则可以从 AjaxCheckBox#onUpdate() 方法中删除 someComponent.setVisible(checkBoxValue); 代码

更新 2

Component WebMarkupContainer 允许您包装一些组件。当它隐藏时 - 然后它们真的从标记中删除。但无论如何,容器标记将以 display:hidden 样式存在。

在某处创建容器,例如:

WebMarkupContainer container = new WebMarkupContainer ( "cont" );
//we will hide this container, so we can replace someComponent.setOutputMarkupPlaceholderTag ( true ); by this
container.setOutputMarkupPlaceholderTag ( true );

将容器添加到表单:

form.add(container);

将我们的 someComponent 添加到这个容器中:

container.add(someComponent);

并且在 AjaxCheckBox#onUpdate() 方法中使用 ajax 更新容器:

protected void onUpdate(AjaxRequestTarget target) {
//if checkbox is checked, then our component is shown
container.setVisible(checkBoxValue);
target.add(container);
}

在 html 代码中是这样的

  <div wicket:id="cont">
<input type="text" wicket:id="someComponent"/>
</div>

您可以向此类容器中添加任意数量的组件,并且可以使用它来管理它们。

关于java - WICKET:控制更改 CheckBox 时组件的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422235/

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