Wicket标签+ Ajax无法正常工作

时间:2011-12-09 08:05:34

标签: java ajax label wicket

我对标签有一个简单而神秘的问题,并使用ajax来显示它。

public class ChecklistTemplateForm extends Form{
    private static final long serialVersionUID = 1L;
    private Label cantSaveLabel;
    public ChecklistTemplateForm(String id) {
        super(id);
        cantSaveLabel = new Label("cantSaveLabel", "Name is not unique, enter another name and try saving again.");
        cantSaveLabel.setVisible(false);
        cantSaveLabel.setOutputMarkupId(true);
        add(cantSaveLabel);
        add(new AjaxButton("saveButton") {
            private static final long serialVersionUID = 1L;
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                target.addComponent(cantSaveLabel);
                //here i do some stuff to decide if canSave is true or false
                if (canSave){
                    setResponsePage(AdminCheckListPage.class);
                }
                else if (!canSave){
                    cantSaveLabel.setVisible(true);
                    System.out.println(canSave);
                }
            }
        }); 
    }

}

有趣的是,canSave是假的,System.out.print有效,但cansavelabel永远不可见。我错过了什么?

2 个答案:

答案 0 :(得分:13)

你必须告诉wicket它应该使用占位符标记,因为它无法更新标记中不存在的组件。

cantSaveLabel.setOutputMarkupId(true);
cantSaveLabel.setOutputMarkupPlaceholderTag(true);

答案 1 :(得分:2)

您无法通过Ajax更新Label,因为它不在呈现的页面中。

cantSaveLabel.setVisible(false); 

使得Label不在HTML中。您需要使用另一个组件(WebMarkupContainer)包围Label,在此处调用setOutputMarkupId(true)并将此容器添加到标签的AjaxRequestTarget instaed。