我有一个简单而神秘的标签问题,并使用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为false, System.out.print工作,但是cansavelabel永远不会显示。我错过了什么?
您必须告诉wicket它应该为您的标签使用占位符,因为它不能更新标记中不存在的组件。
cantSaveLabel.setOutputMarkupId(true);
cantSaveLabel.setOutputMarkupPlaceholderTag(true);
不能通过Ajax更新Label,因为它不在呈现的页面中。
cantSaveLabel.setVisible(false);
使标签不在HTML中。你需要用另一个组件(WebMarkupContainer)包围标签,调用setOutputMarkupId(true),并将这个容器添加到AjaxRequestTarget中,而不是标签。