ファイルアップロードコンポーネント
では、入力フィールドと、ローカルシステムでファイル選択ダイアログを開くボタンを提供しています。ユーザーは、ファイルを選択したり、入力フィールドにファイル名を入力したりできます。ページが送信されると、ファイルの内容のコピーが Web アプリケーションに送信されます。このコンポーネントは、テキストファイル、イメージファイル、およびその他のデータを収集する場合に便利です。アップロードされるファイルの内容は、ファイル名、サイズ、および MIME タイプ (text/plain や image/jpeg など) を含む一部のファイル情報と共に格納されます。
このコンポーネントは、HTML の <input type="file"> 要素に似ています。
columns」プロパティーの設定より小さい幅を「style」プロパティーに設定した場合、Internet Explorer は幅の設定だけに従うのに対し、Mozilla ブラウザはその設定を無視し、「columns」プロパティーの文字数に従って幅を設定します。ファイルアップロードコンポーネントでは、フィルタが使用されます。このフィルタは、Web アプリケーションの配備記述子で設定された com.sun.webui.jsf.util.UploadFilter オブジェクトです。UploadFilter では、Apache commons の fileupload パッケージが使用されます。場合によって、次の 2 つのケースでこれらの設定の変更が必要になることがあります。
web.xml ファイルで、UploadFilter フィルタエントリの sizeThreshold パラメータを変更します。下記のように、最大ファイルサイズは、Web アプリケーションの web.xml ファイルで UploadFilter フィルタエントリの「maxSize」パラメータを変更することによって変更できます。
maxSize パラメータに負の値を設定すると、ファイルのサイズは制限なしになります。セキュリティー上の理由から、負の値を設定することは推奨しません。たとえば、ファイルのサイズを無制限にした場合、悪意のあるユーザーが、きわめて大きなファイルを使用することによって、サイトのサービス妨害をする可能性があります。web.xml ファイル内の UploadFilter オブジェクトの設定を変更するには、次の手順に従います。 maxSize」および「sizeThreshold」パラメータの値を変更できます。アップロードされたファイルと、そのファイルに関する情報は、com.sun.webui.jsf.model.UploadedFile のインスタンスに格納されます。このオブジェクトを使用することで、ファイルの内容を String 型で取得したり、内容をディスクに書き込んだり、ファイルの名前やサイズなどのプロパティーを取得したりできます。メモリーを節約するため、内容とファイルのデータは、ファイルがアップロードされた HTML 要求の処理中にのみ使用可能です。アップロードされたファイルの内容にアクセスするには、「uploadedFile」プロパティーを、com.sun.webui.jsf.model.UploadedFile 型の Bean プロパティーにバインドします。ファイルは設定メソッドまたはアクションメソッドで処理します。
UploadedFile インタフェースには、ファイルの名前とサイズを取得したり、ファイルの MIME タイプ (text/plain あるいは image/jpeg など) を特定したり、ファイルの内容をバイトまたは String 型として取得したり、内容をディスクに書き込んだりするためのメソッドがあります。また、ファイルアップロードコンポーネントの preservePath プロパティを設定すると、getClientFilePath() メソッドを呼び出して UploadedFile Bean から保持されたパスを取得できます。詳細は、Java エディタで、宣言文内の UploadedFile を右クリックし、ポップアップメニューから「Javadoc を表示」を選択してください。
validate メソッド内にカーソルが置かれた状態で Java エディタが開き、このコンポーネントの値の妥当性を検査するコードを挿入できます。processValueChange メソッド内にカーソルが置かれた状態で Java エディタが開き、このコンポーネントの値に変更があったときに実行するコードを挿入できます。このメソッドは、コンポーネントのポップアップメニューから「変更時に自動送信」を選択すると実行されるようになります。「変更時に自動送信」によって、コンポーネントの値が変化したときにページが送信されるからです。この機能は、コンポーネントが仮想フォームに含まれている場合に便利です。common_timeoutSubmitForm(this.form, '<コンポーネント ID>'); に設定されます。このコードによって、実行時にユーザーがコンポーネントの値を変更した場合に自動的にフォームが送信されます。フォームが送信されたら、サーバーで変換と妥当性検査が行われ、値変更のリスナーメソッドがある場合はそのメソッドが実行されてから、ページが再表示されます。
「変更時に自動送信」が設定されているコンポーネントには、仮想フォームを使用して、フォームの送信時に処理される入力フィールドを制限できます。自動送信するコンポーネントを、仮想フォームを送信するように定義した場合、自動送信時には仮想フォームに含まれるフィールドだけが処理されます。
text」プロパティーを、オブジェクトまたはデータプロバイダにバインドします。詳細については、「データにバインド」ダイアログを参照してください。com.sun.webui.jsf.model.UploadedFile 型の Bean プロパティーと「uploadedFile」プロパティーのように、コンポーネントのプロパティーをオブジェクトまたはデータプロバイダにバインドします。