wicket按钮启用/禁用动态更新

时间:2014-04-08 08:17:52

标签: java wicket

我有一个包含2个日期字段和一个按钮的表单。 我需要在日期无效时创建禁用的按钮,并在用户在字段中键入日期时动态启用。如何刷新页面中的按钮?

下面的代码不起作用。我知道我必须做一些刷新页面元素的东西,但我不知道该怎么做。

private void initFields() {
    startDate = new DateTextField("startDate", "Дата начала периода", null, NSDConsts.DATE_FORMAT);
    startDate.setOutputMarkupId(true);
    startDate.addSubmitter();
    startDate.getFormComponent().add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(AjaxRequestTarget paramAjaxRequestTarget) {
            startDateValue = startDate.getDate();
            exportButtonVisibility();
        }
    });
    form.add(startDate);

    endDate = new DateTextField("endDate", "Дата окончания периода", null, NSDConsts.DATE_FORMAT);
    endDate.setOutputMarkupId(true);
    endDate.addSubmitter();
    endDate.getFormComponent().add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(AjaxRequestTarget paramAjaxRequestTarget) {
            endDateValue = endDate.getDate();
            exportButtonVisibility();
        }
    });
    form.add(endDate);

    exportButton = new CinimexAjaxLink("createButton", "Создать", new NRDTextLinkDecorator()) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            if (dateTextFieldCheck(startDate, endDate)) {
                ((ActionsAuditManager) getManagerFacade().getManager(ActionsAuditManager.BEAN_NAME)).createNote(AuditActions.CALCULATE_DETALIZATION, "Отчет успешно сформирован", null, null);
                download.initiate(target);
            } else {
                String message = "Введена неверная дата";
                if (startDate.getString().compareTo(endDate.getString()) > 0) {
                    message = "Дата начала периода не может быть больше даты окончания";
                }
                getDialogWindow().showInfo(message);
            }
        }
    };
    exportButton.add(download);
    form.add(exportButton);
}

private void exportButtonVisibility () {
    if (dateTextFieldCheck(startDate, endDate)) {
        exportButton.setEnabled(true);
    } else {
        exportButton.setEnabled(false);
    }
}

1 个答案:

答案 0 :(得分:3)

您需要告知Wicket在更改日期后更新导出;所以修改两个日期字段中的更新方法:

    @Override
    protected void onUpdate(AjaxRequestTarget paramAjaxRequestTarget) {
        endDateValue = endDate.getDate();
        exportButtonVisibility();
        paramAjaxRequestTarget.add(exportButton); // Add this line
    }