我有一个输出标记占位符标记设置为 true 的容器。我只想在某个文本字段中输入某个字符串时才显示它。例如,如果我在文本字段中数字“显示”,容器就会出现,如果我数字“隐藏”,它就会消失。我编写了这段代码:
container.setOutputPlaceHolderTag(true);
container.setOuputMarkupId(true);
textfield.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
form.modelChanged();
if ("SHOW".equals(textfield.getModelObject())) {
container.setVisible(true);
} else {
container.setVisible(false);
}
target.addComponent(container);
}
此代码仅在我编写 SHOW 时才有效,但是当我编写另一个字符串时它不会消失。为了让它消失,我必须刷新它们所处的整个表单(我不想要它)。 我该如何解决这个问题??
一些细节:我引用的所有组件都在一个表单中,并且只有当我刷新表单时 setVisible(false) 才起作用。从现在开始,只有 setVisible(true) 有效,容器似乎停留在可见性 true 上。
最佳答案
此代码有效:
public class HomePage extends WebPage {
private static final long serialVersionUID = 1L;
private String someValue;
private WebMarkupContainer container;
public HomePage(final PageParameters parameters) {
super(parameters);
add(container = container());
add(textfield());
}
private WebMarkupContainer container() {
WebMarkupContainer wmc = new WebMarkupContainer("container") {
@Override
protected void onConfigure() {
super.onConfigure();
setVisible("SHOW".equals(someValue));
}
};
wmc.setOutputMarkupPlaceholderTag(true);
return wmc;
}
private TextField textfield() {
TextField tf = new TextField("textfield", new PropertyModel(HomePage.this, "someValue"));
tf.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget art) {
//just model update
art.add(container);
}
});
return tf;
}
}
关于java - Wicket 1.4 中文本字段更改行为的容器可见性控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20245959/