Tomcat と Glassfish の間の JSF 検証で奇妙な動作と思われる現象が発生しています。以前は Tomcat を使用していましたが、現在は完全な Java EE アプリケーション サーバーを実行する必要があります。
テスト中に、空のフィールドをサーバーに送信すると、長さバリデータのみがあり、必須属性がないことに気付きました。Glassfish は検証メッセージを出力していますが、Tomcat はこれらの要素の検証を単純にスキップします。
値が送信され、検証に失敗した場合、すべて正常に機能します。値が入力されず、ページが送信されたときです。
環境仕様
- JSF モハラ 2.1.12
- リッチフェイス 4.1
- 対象サーバー Glassfis 3.1.2
- Tomcat 7.0.27 からの移行
説明されている動作を含むコードのスニペットを次に示します。
<h:inputText id="phoneAreaCode"
maxlength="3"
size="2"
value="#{bean.phoneArea}"
style="margin-left: 8px;">
<f:validateLength minimum="3"/>
<f:validator validatorId="phoneValidator"/>
<a4j:ajax/>
</h:inputText>
ユースケース (Tomcat):
値が指定されている場合、検証が行われます。値が検証に合格した場合、ページは送信を許可され、失敗した場合はページにエラー メッセージが出力されます。
値が指定されていない場合、検証は行われず、ページの送信が許可されます
ユースケース (Glassfish):
同上
値が指定されていない場合でも検証が行われ、明らかに失敗します。
<f:validator/>
タグを介したカスタムバリデータや、のような組み込みバリデータでこの動作が見られ<f:validateLength/>
ます。
コードの違いはありません。コードが実行されているサーバーだけです。私はGoogleを検索しましたが、実際に役立つものは何も見つかりません. 検証について何か理解していませんか? 何かおかしくないですか?
このStackoverflow の質問は同じ問題のように聞こえますが、環境がこのように動作するのを防ぐための解決策や、フィールドが不要な場合に検証を無効にする方法がわかりません。
これについて私を助けてくれた人に感謝します。