Java Wicket 1.4中文本字段更改行为的容器可见性控制
我有一个容器,它的输出标记占位符标记设置为true。我只想在某个文本字段中输入某个字符串时显示它。例如,若在文本字段中输入“显示”,则显示容器,若输入“隐藏”,则容器消失。我制定了以下代码:Java Wicket 1.4中文本字段更改行为的容器可见性控制,java,wicket,Java,Wicket,我有一个容器,它的输出标记占位符标记设置为true。我只想在某个文本字段中输入某个字符串时显示它。例如,若在文本字段中输入“显示”,则显示容器,若输入“隐藏”,则容器消失。我制定了以下代码: container.setOutputPlaceHolderTag(true); container.setOuputMarkupId(true); textfield.add(new OnChangeAjaxBehavior() { @Override
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)起作用,容器似乎在visibility true上受阻。使用
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);
}
container.setOutputPlaceholder标记(true);
container.setOutMarkupId(true);
添加(新的OnChangeAjaxBehavior(){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
form.modelChanged();
如果(“SHOW”.equals(((TextField)getComponent()).getModelObject()){//更改此设置
container.setVisible(true);
}否则{
container.setVisible(false);
}
target.addComponent(容器);
}
我从那里得到了以下提示:此代码有效:
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;
}
}
我不认为有必要更改它,因为它在正确的分支中也没有此更改!我的意思是,如果我digit SHOW它在if中,如果我digit HIDE(或另一个字符串)在else分支中没有您的更改。在容器刷新wicket或setVisible()中有一些内容方法我丢失了或者我不知道。好吧,其余的看起来没问题;你在AJAX调试窗口中看到了什么?/标记中有什么特别的东西吗?不幸的是,行为是一样的,这并没有解决我的问题,但是一种很好的、有效的替代方法谢谢!你使用什么浏览器?Firefox或Chrome开发工具中有任何错误吗?我使用Firefox 25.0和调试器控制台在我尝试数字显示或隐藏或其他字符串时不会打印任何奇怪的错误您尝试将TextField显式添加到AjaxRequestTarget?显式添加是什么意思?添加到什么?target.addComponent(TextField);是的,但是相同的行为,另外,添加组件显式地使编辑文本字段几乎不可能。