【问题标题】:Upload Interface with Primefaces 4.0 doesn't firePrimefaces 4.0 的上传界面不会触发
【发布时间】:2014-03-21 17:27:25
【问题描述】:

我正在使用 Primefaces 4.0 在 Apache Tomcat 7 上运行一个 web 应用程序。 尝试实现类似于 Primefaces ShowCase 的上传接口,上传接口不会触发 backing bean 中的任何函数:

这是我直接在正文中包含的内容(我也尝试过不使用“multiple”、“value”、高级模式、“actionListener”属性)

                            <p:fileUpload id="fileupload_" 
                            value="#{userWizard.fu.uploadedFile}" 
                            fileUploadListener="#{userWizard.fu.addFileToAttachment}" 
                            actionListener="#{userWizard.fu.listener}" 
                            mode="advanced"
                            dragDropSupport="false"
                            update="messages"
                            multiple="false"
                            sizeLimit="50000000"
                            fileLimit="3" 
                            allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                            auto="true"/>
        <p:growl id="messages"  showDetail="true" />

这是我的支持 bean:

 import java.util.LinkedList;
 import java.util.List;
 import org.primefaces.event.FileUploadEvent;
 import org.primefaces.model.UploadedFile;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.SessionScoped;
 import javax.faces.event.ActionEvent;

 @ManagedBean
 @SessionScoped
public class FileUpload {  

private UploadedFile uploadedFile;

List<UploadedFile> files = new LinkedList<UploadedFile>();

public FileUpload() 
{}

public List<UploadedFile> getFiles() {
    System.out.println( "< getFiles > ");
    return files;
}

public void setFiles(List<UploadedFile> files) {
    System.out.println( "< setFiles > ");
    this.files = files;
}

public void addFileToAttachment(FileUploadEvent event)
{
    System.out.println("addfile");
    System.out.println( "upload > " + event.getFile().getFileName());
    files.add(event.getFile());
}

public UploadedFile getUploadedFile() {
    System.out.println( "< getFile > ");
    return uploadedFile;
}

public void setUploadedFile(UploadedFile uploadedFile) {
    System.out.println( "< setFile > ");
    this.uploadedFile = uploadedFile;
}

public void listener(ActionEvent ae)
{
    System.out.println("listener");
}



public void insert()
{
    System.out.println( "insert");
    if(uploadedFile !=null)
    {
        System.out.println( "  > " + uploadedFile.getFileName());
    }
}

} 

我在我的网页上看到了上传界面,并且文件似乎已上传,但没有一个侦听器/设置器 println 打印在我的输出上。我的 FileUpload bean 中带有其侦听器的常规命令按钮会正常触发它。

使用 Primefaces 4.0,我没有在 web.xml 文件中添加 FileUpload 过滤器(我也尝试添加它以防万一,但效果并不好)。

另外,commons-fileupload-1.3.1.jar 和 commons-io-2.4.jar 在我项目的库中。

有人知道我的问题可能出在哪里吗?

谢谢

【问题讨论】:

标签: java jsf jakarta-ee primefaces


【解决方案1】:

经过多次检查,我意识到我使用的是 javax.faces-2.1 而不是 2.2。 结合 javax.servlet API 并且仍在 Primefaces 4.0 中,我的问题现在似乎解决了。

【讨论】:

  • 根据您的回答,您的 JSF 2.2 + PrimeFaces 4 项目中的配置错误...
【解决方案2】:

在您的代码fileUploadListener="#{userWizard.fu.addFileToAttachment}" 中,但您只是发布FileUpload.java。 我没有看到您的userWizard bean 和addFileToAttachment 侦听器方法。但是,请尝试如下

配置web.xml配置如下:

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    <init-param>
        <param-name>thresholdSize</param-name>
        <param-value>51200</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

您的h:form 必须类似于&lt;h:form enctype="multipart/form-data"&gt;

多个上传示例:

multipleupload.xthml

<h:form enctype="multipart/form-data">
        <p:fileUpload fileUploadListener="#{MultipleUploadActionBean.handleProposalAttachment}"  
                    mode="advanced" multiple="true" sizeLimit="3000000"
                    allowTypes="/(\.|\/)(gif|jpe?g|png)$/" id="attachment"/>
</h:form>

MultipleUploadActionBean.java

@ManagedBean(name = "MultipleUploadActionBean")
@ViewScoped
public class MultipleUploadActionBean {
    private List<UploadedFile> uploadFileList = new ArrayList<UploadedFile>();

    public void handleProposalAttachment(FileUploadEvent event) {
        UploadedFile uploadedFile = event.getFile();
        uploadFileList.add(uploadedFile);
    }
}

单次上传示例:

singleupload.xthml

<h:form enctype="multipart/form-data">
    <p:fileUpload value="#{SingleUploadActionBean.uploadedFile}" mode="simple"/>
    <p:commandButton value="Submit" ajax="false" actionListener="#{SingleUploadActionBean.upload}"/> 
</h:form>

SingleUploadActionBean.java

@ManagedBean(name = "SingleUploadActionBean")
@ViewScoped
public class SingleUploadActionBean {
    private UploadedFile uploadedFile;
    //getter & setter

    public void upload() {
        //your operation
    }
}   

【讨论】:

  • 感谢您的回答,我终于设法通过更新其中一个库来解决我的问题(我有 JSF 2.1,将其替换为 2.2,最终一切正常)。我之前尝试将过滤器映射添加到我的 web.xml,但 Primefaces 4 似乎不再是强制性的
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多