1

null 値でバリデーターにエラーを発生させるにはどうすればよいですか? ログから、null フィールドを送信しようとするとバリデーターが呼び出されていることがわかりますが、onError が発生することはないため、これを処理できません。誰かが空のフィールドを送信しようとしたときに、フォームの onSubmit でチェックインする代わりに、フィードバック パネルにエラー メッセージを表示したいと考えています。

@Override
protected void onValidate(IValidatable<String> validatable) {

    String value = validatable.getValue();

    if (value == null) {
        ValidationError error = new ValidationError();
        error.addMessageKey("messageKey");
        validatable.error(error);
    }

}

@Override
public void validateOnNullValue() {
     return true;
}

編集

上記が簡単にできない場合、component.setRequiredが true で、フォームが空のフィールドで送信されたときに、エラー メッセージをフィードバック パネルに簡単に登録できる方法はありますか? ユーザーが空のフィールドでフォームを送信しようとしたときに、ユーザーにフィードバックがないようにしたいだけですが、onSubmit ハンドラーでこれに対するロジックを持ちたくありません。

2いくつかのコンテキストを編集

検証しようとしているフィールドの 2 つを次に示します。

final TextField<String> currentLpnField = new TextField<String>("currentLpn", Model.of(""));
currentLpnField.setOutputMarkupId(true);
currentLpnField.setRequired(true);
currentLpnField.add(new BarcodeLPNValidator());

final TextField<String> upcField = new TextField<String>( "upc", new Model<String>() ); 
upcField.setOutputMarkupId(true);
upcField.setRequired(true);
upcField.add(new BarcodeUPCValidator());

プロパティファイルの内容は次のとおりです。

upc.null=UPC cannot be null
upc.Required=UPC is required

currentLpn.null=LPN cannot be null
currentLpn.Required=LPN is required

*.Required メッセージは、フィールドに情報を入力し、検証してから削除し、再度検証を試みた後にのみ表示されます。フォームを読み込んでデータを入力せずに送信すると、何も得られません。

4

2 に答える 2

3

空でない場合にフィールドを検証するだけの場合は、必要なフィールドを設定します。

component.setRequired(Boolean.TRUE);

次に、ユーザーにフィードバックを提供したい場合は、FeedbackPanel. メッセージがあるときに表示されるように feedbackPanel を構成します。

private FeedbackPanel feedbackPanel;
feedbackPanel  = new FeedbackPanel("feedbackPanel") {
    @Override
    protected void onConfigure() {
        super.onConfigure(); 
        setVisible(anyMessage());
    }
};
feedbackPanel.setOutputMarkupPlaceholderTag(true);

次に、AJAX を使用してフォームを送信する場合、feedbackPanel を追加する必要があります。これにより、AjaxRequestTarget再レンダリングが行われ、(エラー) メッセージがある場合は、feedbackPanel にメッセージが表示されます。

AjaxButton btn = new AjaxButton("button") {
    @Override
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        super.onSubmit(target, form); 
        target.add(feedbackPanel);
    }
};

さらに、適切なエラー メッセージを取得するには、コンポーネントのラベルを設定します。

component.setLabel(Model.of("Username"));

次に、フィールドが空の場合、エラー メッセージは次のようになります。

フィールド「ユーザー名」を空にすることはできません。

于 2013-08-17T07:30:44.163 に答える