English 中文(简体)
• 如何使用初级产品:文件上载? 清单方法从未被采用,有效载荷法则完全无效。
原标题:How to use PrimeFaces p:fileUpload? Listener method is never invoked or UploadedFile is null / throws an error / not usable

I m 试图上载使用总理的文件,但UploadListener 这种方法是在上载后使用的。

这里的观点是:

<h:form>
    <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"
        mode="advanced" 
        update="messages"
        sizeLimit="100000" 
        allowTypes="/(.|/)(gif|jpe?g|png)$/"/>

    <p:growl id="messages" showDetail="true"/>
</h:form>

The bean:

@ManagedBean
@RequestScoped
public class FileUploadController {

    public void handleFileUpload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

}

我对这种方法做了一个断点,但从来就没有了。 在使用<代码>mode=“simple”和ajax=“false”时,该代码被援引,但我希望以先进方式开展工作。 I m 使用Netbeans和玻璃鱼3.1。

最佳回答

How to configure and多难点击<p:fileUpload>取决于总理法文本和共同财产法文本。

All PrimeFaces versions

下面的要求适用于所有总理版本:

  1. The enctype attribute of the <h:form> needs to be set to multipart/form-data. When this is absent, the ajax upload may just work, but the general browser behavior is unspecified and dependent on form composition and webbrowser make/version. Just always specify it to be on the safe side.

  2. 在使用<代码>mode=“预付”(即Ajax上载荷,这是缺省)时,确保你在(主管)模板中填写<代码><h:head>。 这将确保适当列入必要的 Java文本。 <代码>mode=“simple” (non-ajax upload)并不要求这样做,但这将打破所有其他总理的感觉和功能,因此你不想错过。

  3. 在使用<条码>mode=“simple”(即非jax upload)时,Ajax必须按<条码>jax=“false”在任何总理指挥所/联系上致残,并且必须使用<条码><p:fileUpload> with <p:commandButton action>,而不是<p:file: 有效载荷听众;

因此,如果你想要(auto)在亚克斯支援下卸载(见<h:head>!):

<h:form enctype="multipart/form-data">
    <p:fileUpload listener="#{bean.upload}" auto="true" /> // For PrimeFaces version older than 8.x this should be fileUploadListener instead of listener.
</h:form>
public void upload(FileUploadEvent event) {
    UploadedFile uploadedFile = event.getFile();
    String fileName = uploadedFile.getFileName();
    String contentType = uploadedFile.getContentType();
    byte[] contents = uploadedFile.getContents(); // Or getInputStream()
    // ... Save it, now!
}

或者,如果你想要卸载非杰克斯文件:

<h:form enctype="multipart/form-data">
    <p:fileUpload mode="simple" value="#{bean.uploadedFile}" />
    <p:commandButton value="Upload" action="#{bean.upload}" ajax="false" />
</h:form>
private transient UploadedFile uploadedFile; // +getter+setter

public void upload() {
    String fileName = uploadedFile.getFileName();
    String contentType = uploadedFile.getContentType();
    byte[] contents = uploadedFile.getContents(); // Or getInputStream()
    // ... Save it, now!
}

请注意,与麻醉相关的特性,例如autoallowTypesonstart>oncompleteoncomplete等,均载于mode="simple”/code>。 因此,在这种情况下,无需具体说明。

还注意到<代码>上载File 财产被宣布为transient,仅是为了使人们认识到这绝对不是序列性的。 整个事项应当放在请求范围很广的床上,而不是放在观点上,甚至放在会议范围上。 如果是这样的话,那么你可以安全地删除<条码>中途<>>。

并请注意,您应在上述方法内,而不是在以后的吉大港山区请求中采用的一种不同的信条,直接阅读和保存文件内容。 这是因为,从技术上讲,上载的档案内容要求范围很广,因此无法在以后/不同的吉大港山区管理局的请求中查阅。 在随后的请求中读到该文本的任何尝试都很可能在临时档案中以<代码>java.io.FileNotFoundException告终,并且只会造成混乱。


PrimeFaces 8.x or newer

配置与以下5.x版本的索引相同,但如果不打电话给你的听众,则核对方法的特性是否称作listener,而不是fileUploadListener 。 同8.x之前的版本一样。


PrimeFaces 5.x

如果你至少重新使用共同基金2.2和<代码>faces-config.xml,则要求增加配置。 您确实是<>而不是 ,这完全需要由总理提交上载过滤器,而且你还需要<>tong>not > 。 UPLOADER/code> context para amount in web.xml。 如果你不清楚如何根据使用的目标服务器适当安装和配置共同财产,则标题是。 • 如何通过Maven适当安装和配置JF图书馆? Installing JSF" section of we JSF wiki page.

If you re however not using JSF 2.2 yet and you can t upgrade JSF 2.0/2.1 to 2.2 yet (should be effortless though when already on a Servlet 3.0 compatible container), then you need to manually register the below PrimeFaces file upload filter in web.xml (it will parse the multi part request and fill the regular request parameter map so that FacesServlet can continue working as usual):

<filter>
    <filter-name>primeFacesFileUploadFilter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>primeFacesFileUploadFilter</filter-name>
    <servlet-name>facesServlet</servlet-name>
</filter-mapping>

The <servlet-name> value of facesServlet must match exactly the value in the <servlet> entry of the javax.faces.webapp.FacesServlet in the same web.xml. So if it s e.g. Faces Servlet, then you need to edit it accordingly to match.


PrimeFaces 4.x

与5.x总理相同的故事也适用于4.x。

There s only a potential problem in getting the uploaded file content by UploadedFile#getContents(). This will return null when native API is used instead of Apache Commons FileUpload. You need to use UploadedFile#getInputStream() instead. See also How to insert uploaded image from p:fileUpload as BLOB in MySQL?

本土APIC的另一个潜在问题是,当上载部分以不同“正常”的jax要求被发射而没有处理上载部件时。 另见。 档案库与法国宇宙航空研究开发机构合作,在KFaces 4.0/JSF 2.2.x-javax.servlet。 ServletException: 申请内容类型不是多部分/格式数据

这两种问题也可以通过改用阿帕奇科斯文档上载解决。 详见3.x节。


PrimeFaces 3.x

这一版本并不支持 JSF 2.2 3.0 本地文件上载。 您需要人工安装阿帕奇科斯文档上载,并在<代码>web.xml上明确登记文件上载过滤器。

你们需要以下图书馆:

这些人必须参加网络应用时间段。 在使用Maven时,确保至少可以操作时间(汇编的缺失范围也很好)。 在人工携带联合报告时,确保填写在<代码>/WEB-INF/lib上。

文档上载过滤器登记细节见上文5.x节。 如果你重新使用4+总理,你愿意明确使用阿帕奇科斯·卷宗上载,而不是使用共同财产基金。 2.2 / Servlet 3.0 home file upload, 然后,在上文提及的图书馆旁边,您也需要过滤web.xml以下背景段:

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>commons</param-value><!-- Allowed values: auto, native and commons. -->
</context-param>

Troubleshooting

如果仍然没有工作,这又可能是与总理结构无关的原因:

  1. 只有当你重新使用总理府文件上载过滤器时: 在其网页上还有另一个<代码>Filter, 运行之前>, 即: 总理文件上载过滤器,并且已经通过下列方式消耗了申请机构:getParaifMap(,getParaifMap(),getReader(,等等。 申请机构只能一劳永逸。 当你在文件上上载过滤器之前使用其中一种方法时,文件上载过滤器就会有一个空洞的要求机构。

    为了确定这一点,你需要将文件上载过滤器的<代码><filter-mapping>上载过滤器的 <<> before<>。 http://code>web.xml。 如果请求不是<条码>多部分/格式数据的要求,那么文件上载过滤器就象没有发生那样继续。 如果你使用自动添加的过滤器,因为其使用说明(例如,PrettyFaces),你可能需要通过网络xml添加明确的命令。 见。 如何根据《世界行动计划》说明确定“服务器过滤器”的执行顺序

  2. 只有当你重新使用总理府文件上载过滤器时: 在其网页上还有另一个<代码>Filter, 运行 <<<> > 以前> 提交文件上载过滤器,并进行了RequestDiquestsuper#(<>/code>。 通常,URL 螺旋式过滤器,例如PrettyFaces 。 这触发了<条码>FORWARD的发送器,但仅通过在<条码>查询上的发送器过滤器。

    为了确定这一点,你需要要么把总理文件上载过滤器上载到 <> > <> > > 发送过滤器上,要么重新配置总理文件上载过滤器,在FORWARD/code>上播放。 派遣人员也:

    <filter-mapping>
        <filter-name>primeFacesFileUploadFilter</filter-name>
        <servlet-name>facesServlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    
  3. 登有<代码><h:form>。 这种做法是不合法的,而浏览器的行为没有说明。 浏览器获得的提呈数据比以往多。 确保您不打上<代码><h:form>。 这完全不考虑<代码>enctype 。 完全不是表态。

If you re still having problems, well, debug the HTTP traffic. Open the webbrowser s developer toolset (press F12 in Chrome/Firebug23+/IE9+) and check the Net/Network section. If the HTTP part looks fine, then debug the JSF code. Put a breakpoint on FileUploadRenderer#decode() and advance from there.


Saving uploaded file

在你最后找工作之后,你的下一个问题很可能是“我节省了上载档案吗? 最好在此继续:。 • 如何节省在JSF上的上载档案。

问题回答

你们也在使用前言? 接着向农耕地派遣人员:

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

第一点与总理3.4和Netbeans 7.2:

移除网人自动填充功能处理机载荷参数,即(喷口)否则会无效。

<h:form>
    <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload(event)}"
        mode="advanced" 
        update="messages"
        sizeLimit="100000" 
        allowTypes="/(.|/)(gif|jpe?g|png)$/"/>

    <p:growl id="messages" showDetail="true"/>
</h:form>

参看javax.faces。 不得等于

p:fileUpload within a h:form 解决了我的问题。

我与第5.3号序言有同样的问题,我走过了俾路支委员会描述的所有要点,没有结果。 我遵循了他关于拆卸文件上载的Renderer#decode()的建议,我发现我的网络xml没有适当设置。

<context-param>
  <param-name>primefaces.UPLOADER</param-name>
  <param-value>auto|native|commons</param-value>
</context-param>

www.un.org/Depts/DGACM/index_spanish.htm 准值必须是这3项价值中的1项,但并非全部! 可删除整个背景部分,缺省为

bean.xhtml

    <h:form enctype="multipart/form-data">    
<p:outputLabel value="Choose your file" for="submissionFile" />
                <p:fileUpload id="submissionFile"
                    value="#{bean.fileiii"
                    fileUploadListener="#{bean.uploadFileiii" mode="advanced"
                    auto="true" dragDropSupport="false" update="messages"
                    sizeLimit="100000" fileLimit="1" allowTypes="/(.|/)(pdf)$/" />

</h:form>

Bean.java

@ManagedBean

@ViewScoped public class Submission implements Serializable {

private UploadedFile file;

//Gets
//Sets

public void uploadFasta(FileUploadEvent event) throws FileNotFoundException, IOException, InterruptedException {

    String content = IOUtils.toString(event.getFile().getInputstream(), "UTF-8");

    String filePath = PATH + "resources/submissions/" + nameOfMyFile + ".pdf";

    MyFileWriter.writeFile(filePath, content);

    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
            event.getFile().getFileName() + " is uploaded.", null);
    FacesContext.getCurrentInstance().addMessage(null, message);

iii

iii

网址:xml

    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<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>

这里的建议对我都没有帮助。 因此,我不得不去掉头脑,发现问题的原因是:

java.lang.IllegalStateException: No multipart config for servlet fileUpload

然后,我在网上的Sxml中增加了一栏。 因此,这个问题已经解决:

<servlet>
    <servlet-name>main</servlet-name>

        <servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <location>/tmp</location>
            <max-file-size>20848820</max-file-size>
            <max-request-size>418018841</max-request-size>
            <file-size-threshold>1048576</file-size-threshold>
        </multipart-config>
    </servlet>

对使用美英或托马特语的人来说,如果他们能够工作,则试图在上建立 META-INF,并添加allowCasualMultipartParsing=“true”

<?xml version="1.0" encoding="UTF-8"?>
<Context allowCasualMultipartParsing="true">
  <!-- empty or not depending your project -->
</Context>

With JBoss 7.2(Undertow) and PrimeFaces 6.0 org.primefaces.webapp.filter.FileUploadFilter should be removed from web.xml and context param file uploader should be set to native:

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>native</param-value>
</context-param>

我也存在同样的问题,因为我在这个职位上都有描述的组合,但我的情况是,我有两家酒类进口(其中一人是 Prime j的酒类),这造成了冲突,导致文件上载。

https://stackoverflow.com/questions/16166039/manually-adding-loading-jquery-with-primefaces-results-in-uncating-typeerors>。





相关问题
JSF a4j:support with h:selectManyCheckbox

I m having trouble with a JSF selectManyCheckbox and A4J support. The purpose is to run some action when a checkbox is selected. This works perfectly in Firefox. Yet, when testing in any IE (ie6 / ie7 ...

Mojarra for JSF Encoding

Can anyone teach me how to use mojarra to encode my JSF files. I downloaded mojarra and expected some kind of jar but what i had downloaded was a folder of files i don t know what to do with

如何拦截要求终止?

在共同基金中,如果用户要求终止,就需要采取一些行动。 我需要某种拦截器,但我不知道如何这样做。 我需要帮助。 增 编

ICEFaces inputFile getting the file content without upload

Is there any way of just getting the content of the browsed file without any upload/file transfer operations? I currently use ICEFaces inputFile component but I do not need the default uploading ...

Weird behaviour of h:commandLink action (MethodExpression)

I have two JSPs where I am displaying some info from database in a h:dataTable. One of them is showing all the info, and one of them user specifically. I have showXML.jsp that shows the "XML" column ...

How to correctly use ResultSet with h:dataTable

The problem is, that after displaying the ResultSet with <h:dataTable>, the connection is left open. If I close it, it closes the ResultSet too. I m thinking about copying the ResultSet data ...