我有一个输出标记占位符标记设置为true的容器。我想只显示某个文本字段中的某个字符串。例如,如果我在文本字段中对“show”进行数字显示,则会出现容器,如果我用“隐藏”数字,它就会消失。我做了这个代码:
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)可以工作,看起来容器在可见性上是真的。
答案 0 :(得分:1)
此代码有效:
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;
}
}
答案 1 :(得分:0)
使用
container.setOutputPlaceHolderTag(true);
container.setOuputMarkupId(true);
textfield.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
form.modelChanged();
if ("SHOW".equals(((TextField<String>) getComponent()).getModelObject())) { //change this
container.setVisible(true);
} else {
container.setVisible(false);
}
target.addComponent(container);
}
我从Getting a Wicket text box's value in an AJAX onchange event
得到了这个提示