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