【问题标题】:How to refresh label after changing color in wicket如何在检票口中更改颜色后刷新标签
【发布时间】:2020-12-14 17:49:29
【问题描述】:

我使用 Wicket 1.5

当我改变颜色时,只有在使用 F5 刷新后才会在页面上真正改变。如何在后台刷新?

我用这条线来改变颜色: dateDescription.add(AttributeModifier.replace("style", "color:red;")); 添加(日期描述);

更新 #1 现在我使用 AJAX 但仍然需要刷新页面才能更改颜色。你能告诉我我做错了什么吗?

    // in page class
    public class FilterUpdateBehavior extends AjaxFormComponentUpdatingBehavior {
        public FilterUpdateBehavior(String event) {
            super(event);
        }

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            RefreshResult result = getResult(target);
            if (result.getStatus() == RefreshResultStatus.DATE_NOT_SET) {
                dateIntervalFilterPanel.setAlarmDateStatus(true);
            } else {
                dateIntervalFilterPanel.setAlarmDateStatus(false);
            }
        }
    }
    
    
    // in date panel class
    dateDescription.add(new AttributeModifier("style", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    String cssClass = null;
                    if (isAlarmDateStatus()) {
                        cssClass = "color:red;";
                    } else {
                        cssClass = "color:black;";
                    }
                    return cssClass;
                }
            }));
    add(dateDescription);

更新 #2

    public RefreshResult getResults(AjaxRequestTarget target) {
        // ... somewhere here additional logic of getting particulate RefreshResult
        target.add(table);
        target.add(paging);
        target.add(loadingPanel);
        return new RefreshResult(resultType);
    }

更新 #3 最终版(它帮助了我) 当我更改 isAlarmDateStatus 时,我错过了此代码行,现在它工作正常。感谢安德里亚!

    target.add(dateDescription);

【问题讨论】:

    标签: java wicket wicket-1.5


    【解决方案1】:

    您的代码行看起来不错,但您必须使用 AJAX 来反映您的更改,而无需重新加载整个页面。不幸的是,Wicket 1.5 真的已经过时了,网上很少有资源可以为您提供 AJAX 支持的示例。您可以尝试在此处查看旧的 1.5 AJAX 示例代码:

    https://github.com/apache/wicket/tree/build/wicket-1.5.17/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin

    【讨论】:

    • 我用 AJAX 改变了实现并更新了问题,你能告诉我你的意见吗?
    • 我猜你错过了 getResult(...) 的代码。我希望在您的代码中的某处看到“target.addComponent”。
    • 我添加了 getResults(..) 方法,我为页面的 3 个元素添加了 target.add - 过滤器、分页、加载面板。这些元素在 onUpdate 事件之后真正更新。我应该使用“target.add(dateIntervalFilterPanel)”来更新带有我想在 onUpdate 事件期间更新它的标签的面板吗?
    • 只需将标签添加到“AjaxRequestTarget 目标”就可以了。您是否在要通过 AJAX 更新的每个组件上调用了 setOutputMarkupId?
    猜你喜欢
    • 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
    相关资源
    最近更新 更多