12

入力フォーム データをWeb サービスに送信し、Web サービスによって提供される応答を表示する JSF ベースの Web アプリケーションがあります。

ユーザーが入力した入力データを検証するWebサービスです。ここをどのように使用できるかわかりませんJSF validation。私の理解によると、JSF はビュー内の個々のコンポーネントを検証します。しかし、毎回 Web サービスのリクエストを行うのは非常にコストのかかる操作になります。

代わりに、ユーザーがフォームを送信すると、すべての検証をスキップし、アクション メソッドで Web サービス リクエストを行います。Web サービスからの応答に基づいて、特定の UI コンポーネントが無効であることをプログラムで判断できますか?

これについてあなたの提案を教えてください。

環境:-

JSF 2.0
WebSphere Application Server 8.5
4

2 に答える 2

22

Web サービスからの応答に基づいて、特定の UI コンポーネントが無効であることをプログラムで判断できますか?

はい、 を呼び出しUIInput#setValid()て を渡すことでそれを行うことができますfalse。これが完全な作品です:

FacesContext context = FacesContext.getCurrentInstance();
UIInput input = (UIInput) context.getViewRoot().findComponent("form:input");
input.setValid(false);
context.addMessage(input.getClientId(context), message);
context.validationFailed();

FacesContext#validationFailed()ちなみに、入力ごとに呼び出す必要はありません。

于 2012-12-23T16:39:40.383 に答える
2

このチュートリアルを見てください-セクション「手動検証」。

これはおそらくあなたが達成しようとしていることです。

手動検証

  • Beanの文字列プロパティを使用します(不正なデータを処理するには、try / catchブロックを使用します)
  • セッターメソッドおよび/またはアクションコントローラーで検証を行う
  • nullを返してフォームを再表示します
  • カスタムエラーメッセージを作成し、FacesMessageに保存します
  • h:messagesを使用して、エラーメッセージのリストを表示します(メッセージがない場合、これは何も出力しません)

たとえば、Beanの場合:

public void setBidAmount(String bidAmount) {
    this.bidAmount = bidAmount;
    try {
        numericBidAmount = Double.parseDouble(bidAmount);
    } catch(NumberFormatException nfe) {}
}

そして実際の方法:

public String doBid() {
    FacesContext context = FacesContext.getCurrentInstance();
    if (getNumericBidAmount() <= 0.10) {
        context.addMessage(null, 
        new FacesMessage("Bid amount must be at least $0.10."));
    }
    ...
    if (context.getMessageList().size() > 0) {
        return(null);
    } else {
        doBusinessLogicForValidData();
        return("show-bid1");
    }
}
于 2012-12-23T16:25:56.057 に答える