3

「FeedbackLabels」を使用して、このブログ投稿のアイデアとコードに基づいて、コンポーネント固有の検証メッセージを表示しています: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は次のように主張しています。

コンポーネントを対象としたフィードバックメッセージはレンダリングされませんでした。これは、ページにFeedbackPanelがないことが原因である可能性があります。

スクリーンショットでわかるように、これらのメッセージ(各フィールドに付随するFeedbackLabelsで)レンダリングされ、ページにはFeedbackPanelもあります(ただし、ComponentFeedbackMessageFilterを使用して、コンポーネントを対象としたメッセージをフィルタリングします。 2回表示されません)。

ここに画像の説明を入力してください

いずれにせよ、これらのログメッセージは明らかに役に立ちません。これについてWicketをシャットダウンするにはどうすればよいですか?(ロギングレベルをFATALに変更するようなブルー​​トフォース方式に頼ることなく。)DaanのFeedbackLabel実装で何かを修正する必要がありますか(以下を参照)?


付録:基本的に、FeedbackLabel(Labelを拡張)は、関連するコンポーネントにフィードバックメッセージがあるかどうかを確認し、ある場合はそれを表示します。記事からコードをロードするのが面倒な場合は、関連する部分を次に示します。

// (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(""));
    }
}
4

1 に答える 1

2

FeedbackMessageにはmarkRendered()関数があります。ラベルに追加されたメッセージごとに、これに呼び出しを追加します。FeedbackPanelのコードを参照してください。

于 2012-05-04T10:02:05.823 に答える