これは数か月前に尋ねられて回答されたことを認識していますが、今日同じ問題に対する回答を探していたときにこれを見つけました。
Sven の回答は直接には役に立ちませんでしたが、オプション #2 が私の解決策の最終的なヒントになりました。多分それは他の人にも役立つかもしれません:
まず第一に、私のページは標準のボタンを使用しています(編集可能なフィールドと一緒にいくつかの非表示フィールドを設定する必要があるため、「送信」タイプのボタンではありません)。したがって、最終的な保存が完了する前に、このスクリプトをボタン コードに追加しました。
var numAtts = myDocDatasource.getAttachmentList("Body").size();
if(numAtts == 0){
var msg = new javax.faces.application.FacesMessage("You need to attach a file");
facesContext.addMessage("File validation error", msg);
return false;
}
//do some more stuff
...
myDocDatasource.save();
プロセスのその段階では、アップロードされたファイルはすでにデータソースの一部であるため、検証に関しては、fileUpload コントロールの内容は実際には問題ではないことを認識しなければなりませんでした。
ただし、この検証ステップの「タイミング」は少し驚くべきものです。少なくとも私の状況では、ファイルのアップロードが検証される前に他のフィールドの検証が行われます。errorMessages コントロールでは、最初に標準の検証エラーのみがリストされます。他のすべてのフィールドが正常に検証された後でのみ、fileUpload バリデーターがエラーを表示します。