Wicket label + Ajax не работает - PullRequest
       11

Wicket label + Ajax не работает

5 голосов
/ 09 декабря 2011

У меня есть простая, загадочная проблема с меткой и использованием 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 ]

13 голосов
/ 09 декабря 2011

Вы должны указать wicket, что он должен использовать метку-заполнитель для вашей метки, потому что он не может обновить компонент, которого нет в разметке.

cantSaveLabel.setOutputMarkupId(true);
cantSaveLabel.setOutputMarkupPlaceholderTag(true);
2 голосов
/ 09 декабря 2011

Вы не можете обновить Метку через Ajax, так как ее нет на отображаемой странице.

cantSaveLabel.setVisible(false); 

делает так, чтобы метка отсутствовала в HTML.Вам нужно будет окружить Label другим компонентом (WebMarkupContainer), вызвать для этого setOutputMarkupId (true) и добавить этот контейнер в AjaxRequestTarget вместо метки.

...