0

私が使っている、

  • グラスフィッシュ 4.0
  • JSF2.2
  • モハラ 2.2.0
  • プライムフェイス3.5

fileUploadXHTML ページにこのコンポーネントがあります。

<h:form enctype="multipart/form-data">

    <p:fileUpload id="txtCatImage" 
                  value="#{testManagedBean.uploadedFile}"
                  mode="advanced"
                  sizeLimit="100000"
                  multiple="false"
                  showButtons="true" 
                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                  fileUploadListener="#{testManagedBean.fileUploadListener}"/>

    <p:message for="txtCatImage" showSummary="false"/>

    <p:commandButton id="btnSubmit" 
                     actionListener="#{testManagedBean.insert}" 
                     icon="ui-icon-check" value="Save"/>
</h:form>

これは、対応するマネージド Bean です。

@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable {

    private UploadedFile uploadedFile;
    private static final long serialVersionUID = 1L;

    public TestManagedBean() {}

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public void setUploadedFile(UploadedFile uploadedFile) {
        this.uploadedFile = uploadedFile;
    }

    public void fileUploadListener(FileUploadEvent event) {
        uploadedFile = event.getFile();
        System.out.println("fileUploadListener invoked.");
    }

    public void insert() {
        if (uploadedFile != null) {
            System.out.println(uploadedFile.getFileName());
        } else {
            System.out.println("The file object is null.");
        }
    }
}

前述のファイル アップロード リスナーfileUploadListener()は呼び出されません。

ファイル アップロード フィルタは次のようにマッピングさweb.xmlれます。

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

クラスパスにApache-commons-fileuploadandを追加しました。Apache-commons-ioSpring / JSF を使用した以前のプロジェクトでも同じことが機能します。

ここで何が欠けているのかわかりません。サーバーのバージョンで何かをする必要がありますか?

4

2 に答える 2

3

おそらく、Glassfish 4 (Java EE 7) に存在する最新の JSF 標準と互換性があるのは Primefaces 4 だけだからです。Primefaces 3.5 は Glassfish 3.1.2.2 (Java EE 6) で動作し
ます。この問題を抱えている人は他にもいます。9 月 16 日月曜日に Primefaces 4.0 RC1 が
開始されるため、本当に GF 4 が必要な場合はそれを試してみてください 。彼のためかどうか。現時点ではそれが唯一の方法だからです。



于 2013-09-15T20:29:05.967 に答える