【问题标题】:Wicket label + Ajax not working检票口标签 + Ajax 不起作用
【发布时间】:2011-12-09 08:05:33
【问题描述】:

我有一个简单而神秘的标签问题,并使用 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 永远不可见。我错过了什么?

【问题讨论】:

    标签: java ajax label wicket


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解决方案。我想知道为什么 Wicket 在启用 _OUTPUT_MARKUP_ID 时不会自动启用 FLAG_PLACEHOLDER?
    • 我认为这个想法是让 HTML 代码尽可能简单明了。默认情况下启用此功能可能会导致 HTML 中出现许多不必要的标签。一旦你知道了,这并不是什么大不了的事...... ;)
    • setOutputMarkupPlaceholderTag() 调用setOutputMarkupId(),因此您无需同时调用两者。
    【解决方案2】:

    您不能通过 Ajax 更新标签,因为它不在呈现的页面中。

    cantSaveLabel.setVisible(false); 
    

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

    【讨论】:

    • 感谢您的帮助。我不知道这种行为。我尝试使用 webmarkupcontainer 但没有成功。我的代码中可能存在其他一些错误,导致它无法正常工作。我现在也意识到,由于我将使用此面板来编辑对象以及创建新对象,因此要求为所有对象指定一个唯一的名称来保存不是最聪明的主意。
    • @fred 你能用 WebMarkupContainer 发布一些代码吗?或者由于您不再需要该行为,问题是否已解决?
    • 对不起,伙计,迟到了。是的,不幸的是,我将其称为包装,因为不再需要该功能。感谢您的意见,很抱歉我无法给您提供更详细的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多