2016-09-21 11 views
1

を受け入れるinputfileに私は自分のフォームにフィールド「のスクリーンショットを添付」オプションを追加したいと思いますので、私はO使用しています:私は、フィールドを空白のままにした場合O:オプションと検証

<o:inputFile id="file" required="false" maxsize="1048576" accept="image/png,image/gif" /> 

:で、inputFileコンポーネントを添付ファイルのスクリーンショット:ファイルのメディアタイプが「一致しません」image/png、image/gif「

どうすればこの検証をオプションにすることができますか?

+0

奇妙な、どのブラウザを使用していますか?これは最新のChromeとFirefoxでは起こりません。さらに、物理ファイルが存在しないときに、その検証を実行しないでください。どうやらあなたのブラウザは何らかの形で空の 'Part'を送信/トリガーしているようです。理論的な回避策( 'accept'属性にちょっとした条件付きEL)がありますが、私は最初にそれを再現したいと思います。 – BalusC

+0

これはどのブラウザーでも起こります。ここにサンプルプロジェクトをアップロードすることはできませんので、プロジェクトに問題をオープンしました。 https://github.com/omnifaces/omnifaces/issues/315 私の環境は:myfaces 2.2.10、omnifaces 2.5.1、tomee – cocorossello

答えて

1

これは、MyFacesで予期しない動作が原因で発生しています。ファイルが選択されていない場合、nullを与えるMojarraでは正常に動作します。しかし、MyFacesは空のファイル名とサイズ0のnullでないPartインスタンスを返します。空のPartのコンテンツタイプはデフォルトでapplication/octet-streamになり、したがって指定されたaccept属性と一致しません。

今のところ、現在のフェーズIDとファイルサイズに基づいてaccept属性を条件付きにすることをお勧めします。レンダリングレスポンスフェーズでは常に評価し、ファイルサイズが0より大きい場合にのみ他のフェーズで評価します。それ以外の場合はacceptのデフォルト値は*/*です。

accept="#{facesContext.currentPhaseId.ordinal eq 6 
      or component.submittedValue.size gt 0 
       ? 'image/png,image/gif' 
       : '*/*'}" 

issue 315の次のOmniFaces 2.6でこれを修正します。

+0

ありがとうございます! – cocorossello

+0

ようこそ。 – BalusC

+0

ファイルの拡張子(「画像/ png」など)は大文字と小文字が区別されるようです。 test.PNGという名前のファイルをアップロードしようとすると、検証に失敗します。これは意図したとおりに機能しますか? 私のOmnifacesのバージョンは2.6.2です。 – sofarsoghood

関連する問題