容器可见性控制在Wicket 1.4中更改文本字段的行为

时间:2013-11-27 15:07:06

标签: java wicket

我有一个输出标记占位符标记设置为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)可以工作,看起来容器在可见性上是真的。

2 个答案:

答案 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

得到了这个提示