【问题标题】:How to avoid superfluous Wicket log warnings when using field-specific FeedbackLabels?使用特定于字段的 FeedbackLabels 时如何避免多余的 Wicket 日志警告?
【发布时间】:2012-05-04 08:54:50
【问题描述】:

我正在使用“FeedbackLabels”来显示特定于组件的验证消息,基于此博客文章中的想法和代码:User friendly form validation with Wicket

问题是,使用此类 FeedbackLabels 验证消息的页面会在日志中充斥着多余的警告:

2012-05-04 10:43:32,824 ["http-bio-8080"-exec-6] WARN  org.apache.wicket.protocol.http.WebSession - Component-targetted feedback message was left unrendered. This could be because you are missing a FeedbackPanel on the page.  Message: [FeedbackMessage message = "Tilille on pakollinen tieto", reporter = toAccount, level = ERROR]
2012-05-04 10:43:32,824 ["http-bio-8080"-exec-6] WARN  org.apache.wicket.protocol.http.WebSession - Component-targetted feedback message was left unrendered. This could be because you are missing a FeedbackPanel on the page.  Message: [FeedbackMessage message = "Tililtä on pakollinen tieto", reporter = fromAccount, level = ERROR]
2012-05-04 10:43:32,824 ["http-bio-8080"-exec-6] WARN  org.apache.wicket.protocol.http.WebSession - Component-targetted feedback message was left unrendered. This could be because you are missing a FeedbackPanel on the page.  Message: [FeedbackMessage message = "Viitenro on pakollinen tieto", reporter = reference, level = ERROR]
2012-05-04 10:43:35,039 ["http-bio-8080"-exec-6] WARN  org.apache.wicket.protocol.http.WebSession - Component-targetted feedback message was left unrendered. This could be because you are missing a FeedbackPanel on the page.  Message: [FeedbackMessage message = "Tilille on pakollinen tieto", reporter = toAccount, level = ERROR]
[...]

Wicket 声称:

以组件为目标的反馈消息未呈现。这可以 是因为您缺少页面上的反馈面板。

问题是,正如您在屏幕截图中看到的那样,这些消息呈现(在每个字段随附的 FeedbackLabels 中),而且我确实在页面(但它使用 ComponentFeedbackMessageFilter 过滤以组件为目标的消息,因此它们不会显示两次)。

无论如何,这些日志消息显然没有用。 我怎样才能让 Wicket 闭嘴? (不诉诸暴力方法,例如将日志记录级别更改为 FATAL。)是否应该在 Daan 的 FeedbackLabel 实现中修复某些问题(见下文)?


附录:基本上是FeedbackLabel(扩展标签)检查相关组件是否有反馈消息,如果有,显示它。如果您不介意从article 加载代码,这里是相关部分:

// (Author of this code is Daan, StuQ.nl
// it's licenced under Apache 2.0 license.)
@Override
protected void onBeforeRender() {
    super.onBeforeRender();

    if(component.getFeedbackMessage()!=null) {
        if(this.text!=null) {
            setDefaultModel(this.text);
        } else {
            setDefaultModel(new Model(component.getFeedbackMessage().getMessage()));
        }

        this.add(new AttributeModifier("class", true, new Model("feedbackLabel " + component.getFeedbackMessage().getLevelAsString())));
    } else {
        setDefaultModel(new Model(""));
    }
}

【问题讨论】:

  • 哦,使用 Wicket 1.4,如果它有所作为的话。

标签: java validation wicket feedbackpanel


【解决方案1】:

FeedbackMessage 有一个 markRendered() 函数。我会为添加到标签的每条消息添加一个调用。请参阅反馈面板的代码。

【讨论】:

  • 工作得很好,谢谢! (调整 FeedbackLabel 的 onBeforeRender() 以便在 component.getFeedbackMessage() != null 条件内调用 markRendered()。)我想我应该在博客文章中添加评论,建议改进,以防原作者或其他人人们仍然使用相同的 FeedbackLabel 代码。
猜你喜欢
  • 1970-01-01
  • 2017-08-17
  • 2019-02-21
  • 2016-12-25
  • 2021-02-04
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2014-03-21
相关资源
最近更新 更多