วิธีใช้ PrimeFaces p: fileUpload? วิธีการ Listener จะไม่ถูกเรียกใช้หรืออัปโหลดไฟล์เป็นโมฆะ / แสดงข้อผิดพลาด / ใช้งานไม่ได้


101

ฉันพยายามอัปโหลดไฟล์โดยใช้ PrimeFaces แต่fileUploadListenerวิธีนี้ไม่ถูกเรียกใช้หลังจากการอัปโหลดเสร็จสิ้น

นี่คือมุมมอง:

<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>

และถั่ว:

@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"จะถูกเรียกใช้ แต่ฉันต้องการให้มันทำงานในโหมดขั้นสูง ฉันใช้ Netbeans และ Glassfish 3.1

คำตอบ:


226

วิธีกำหนดค่าและแก้ไขปัญหา<p:fileUpload>ขึ้นอยู่กับเวอร์ชัน PrimeFaces

PrimeFaces ทุกรุ่น

ข้อกำหนดด้านล่างนี้ใช้กับ PrimeFaces ทุกเวอร์ชัน:

  1. enctypeแอตทริบิวต์ของความต้องการที่จะได้รับการตั้งค่าให้<h:form> multipart/form-dataเมื่อไม่มีสิ่งนี้การอัปโหลด ajax อาจใช้งานได้ แต่พฤติกรรมทั่วไปของเบราว์เซอร์ไม่ได้ระบุไว้และขึ้นอยู่กับองค์ประกอบของแบบฟอร์มและยี่ห้อ / เวอร์ชันของเว็บเบราว์เซอร์ เพียงแค่ระบุให้อยู่ในด้านที่ปลอดภัยเสมอ

  2. เมื่อใช้mode="advanced"(เช่นการอัปโหลด ajax นี่เป็นค่าเริ่มต้น) จากนั้นตรวจสอบให้แน่ใจว่าคุณได้<h:head>อยู่ในเทมเพลต (ต้นแบบ) เพื่อให้แน่ใจว่ามีการรวมไฟล์ JavaScript ที่จำเป็นอย่างเหมาะสม สิ่งนี้ไม่จำเป็นสำหรับmode="simple"(การอัปโหลดที่ไม่ใช่ ajax) แต่จะทำให้รูปลักษณ์และฟังก์ชันการทำงานของส่วนประกอบ PrimeFaces อื่น ๆ เสียหายดังนั้นคุณจึงไม่ควรพลาดสิ่งนั้น

  3. เมื่อใช้mode="simple"(เช่นการอัพโหลดแบบไม่ใช้ ajax) จะต้องปิดการใช้งาน ajax บนปุ่ม / ลิงก์คำสั่ง PrimeFaces โดยajax="false"และคุณจะต้องใช้<p:fileUpload value>กับ<p:commandButton action>แทน<p:fileUpload fileUploadListener>(สำหรับ PrimeFaces <= 7.x) หรือ<p:fileUpload listener>(สำหรับ PrimeFaces> = 8.x)

ดังนั้นหากคุณต้องการอัปโหลดไฟล์ (อัตโนมัติ) ด้วยการสนับสนุน ajax (คำนึงถึง<h:head>!):

<h:form enctype="multipart/form-data">
    <p:fileUpload fileUploadListener="#{bean.upload}" auto="true" /> // for PrimeFaces >= 8.x this should be listener instead of fileUploadListener 
</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!
}

หรือหากคุณต้องการอัพโหลดไฟล์ที่ไม่ใช่ ajax:

<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 UploadedFile uploadedFile; // +getter+setter

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

ทำทราบว่าแอตทริบิวต์ของอาแจ็กซ์ที่เกี่ยวข้องเช่นauto, allowTypes, update,onstart , oncomplete, ฯลฯ จะไม่สนใจmode="simple"ใน ดังนั้นจึงไม่จำเป็นต้องระบุในกรณีเช่นนี้

โปรดทราบว่าคุณควร อ่านเนื้อหาไฟล์ทันทีภายในวิธีการที่กล่าวถึงข้างต้นและไม่ใช้วิธี bean อื่นที่เรียกใช้โดยการร้องขอ HTTP ในภายหลัง เนื่องจากเนื้อหาไฟล์ที่อัปโหลดถูกกำหนดขอบเขตคำขอจึงไม่สามารถใช้งานได้ในคำขอ HTTP ภายหลัง / อื่น ความพยายามใด ๆ ที่จะอ่านในคำขอในภายหลังส่วนใหญ่มักจะจบลงด้วยjava.io.FileNotFoundExceptionไฟล์ชั่วคราว


PrimeFaces 8.x

การกำหนดค่าจะเหมือนกับข้อมูลเวอร์ชัน 5.x ด้านล่าง แต่ถ้าผู้ฟังของคุณไม่ได้ถูกเรียกให้ตรวจสอบว่ามีการเรียกใช้ระบบเสียงหรือไม่ listenerหรือไม่ (เช่นเดียวกับรุ่นก่อน 8.x)fileUploadListener

PrimeFaces 5.x

สิ่งนี้ไม่ต้องการการกำหนดค่าเพิ่มเติมใด ๆ หากคุณใช้ JSF 2.2 และของคุณfaces-config.xmlได้รับการประกาศว่าเป็นไปตามเวอร์ชัน JSF 2.2 คุณไม่จำเป็นต้องมีตัวกรองการอัปโหลดไฟล์ PrimeFaces เลย ในกรณีที่คุณไม่ชัดเจนว่าจะติดตั้งและกำหนดค่า JSF อย่างไรให้ถูกต้องโดยขึ้นอยู่กับเซิร์ฟเวอร์เป้าหมายที่ใช้ให้ไปที่วิธีการติดตั้งและกำหนดค่าไลบรารี JSF อย่างถูกต้องผ่าน Maven? และ "การติดตั้ง JSF" ของหน้าเว็บวิกิพีเดีย

หากคุณยังไม่ได้ใช้ JSF 2.2 และคุณไม่สามารถอัปเกรดได้ (ควรทำได้อย่างง่ายดายเมื่ออยู่ในคอนเทนเนอร์ที่เข้ากันได้กับ Servlet 3.0) คุณต้องลงทะเบียนตัวกรองการอัปโหลดไฟล์ PrimeFaces ด้านล่างด้วยตนเองweb.xml(มันจะแยกวิเคราะห์ไฟล์ คำขอส่วนหนึ่งและกรอกแผนที่พารามิเตอร์คำขอปกติเพื่อให้FacesServletสามารถทำงานต่อได้ตามปกติ):

<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>

<servlet-name>ค่าของfacesServletต้องตรงกับค่าใน<servlet>รายการของในที่เดียวกันjavax.faces.webapp.FacesServlet web.xmlดังนั้นถ้าเป็นเช่นFaces Servletนั้นคุณต้องแก้ไขเพื่อให้เข้ากัน


PrimeFaces 4.x

เรื่องเดียวกับ PrimeFaces 5.x ใช้กับ 4.x เช่นกัน

มีเพียงปัญหาที่อาจเกิดขึ้นในการรับเนื้อหาไฟล์ที่อัปโหลดโดยUploadedFile#getContents(). สิ่งนี้จะกลับมาnullเมื่อใช้ API ดั้งเดิมแทน Apache Commons FileUpload คุณจำเป็นต้องใช้UploadedFile#getInputStream()แทน ดูวิธีแทรกรูปภาพที่อัปโหลดจาก p: fileUpload เป็น BLOB ใน MySQL

ปัญหาที่อาจเกิดขึ้นกับ API เนทีฟอีกประการหนึ่งจะปรากฏขึ้นคือเมื่อส่วนประกอบการอัปโหลดอยู่ในรูปแบบที่มีการเรียกใช้คำขอ ajax "ปกติ" ที่แตกต่างออกไปซึ่งไม่ได้ประมวลผลองค์ประกอบการอัปโหลด ดูเพิ่มเติมการอัปโหลดไฟล์ไม่ทำงานกับ AJAX ใน PrimeFaces 4.0 / JSF 2.2.x - javax.servlet.ServletException: ชนิดเนื้อหาคำขอไม่ใช่ข้อมูลหลายส่วน / แบบฟอร์มmultipart

ปัญหาทั้งสองสามารถแก้ไขได้โดยเปลี่ยนเป็น Apache Commons FileUpload ดูรายละเอียดในส่วน PrimeFaces 3.x


PrimeFaces 3.x

เวอร์ชันนี้ไม่รองรับการอัปโหลดไฟล์เนทีฟ JSF 2.2 / Servlet 3.0 คุณต้องติดตั้ง Apache Commons FileUpload ด้วยตนเองและลงทะเบียนตัวกรองการอัปโหลดไฟล์อย่างชัดเจนในรูปแบบweb.xml .

คุณต้องการไลบรารีต่อไปนี้:

สิ่งเหล่านี้ต้องมีอยู่ในคลาสพา ธ รันไทม์ของ webapp เมื่อใช้ Maven ตรวจสอบให้แน่ใจว่ามีขอบเขตรันไทม์เป็นอย่างน้อย (ขอบเขตเริ่มต้นของการคอมไพล์ก็ดีเช่นกัน) เมื่อพกพาไปรอบ ๆ JAR ด้วยตนเองตรวจสอบให้แน่ใจว่าพวกเขาอยู่ใน/WEB-INF/libโฟลเดอร์

รายละเอียดการลงทะเบียนตัวกรองการอัปโหลดไฟล์สามารถพบได้ในส่วน PrimeFaces 5.x ที่นี่ด้านบน ในกรณีที่คุณใช้ PrimeFaces 4+ และคุณต้องการใช้ Apache Commons FileUpload อย่างชัดเจนแทนการอัปโหลดไฟล์เนทีฟ JSF 2.2 / Servlet 3.0 คุณต้องอยู่ติดกับไลบรารีที่กล่าวถึงและกรองพารามิเตอร์บริบทด้านล่างด้วยweb.xml:

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

การแก้ไขปัญหา

ในกรณีที่ยังใช้งานไม่ได้นี่เป็นอีกสาเหตุหนึ่งที่เป็นไปได้ที่ไม่เกี่ยวข้องกับการกำหนดค่า PrimeFaces:

  1. เฉพาะในกรณีที่คุณกำลังใช้การอัปโหลดไฟล์กรอง PrimeFaces: มีผู้อื่นFilterใน webapp ของคุณซึ่งจะทำงานก่อนที่จะอัปโหลดไฟล์กรอง PrimeFaces และได้บริโภคแล้วร่างกายคำขอโดยเช่นโทรgetParameter(), getParameterMap(),getReader() , เป็นต้น สามารถแยกวิเคราะห์เนื้อหาคำขอได้เพียงครั้งเดียว เมื่อคุณเรียกใช้วิธีใดวิธีหนึ่งก่อนที่ตัวกรองการอัปโหลดไฟล์จะทำงานตัวกรองการอัปโหลดไฟล์จะได้รับเนื้อหาคำขอว่างเปล่า

    เพื่อแก้ไขปัญหานี้คุณจะต้องใส่<filter-mapping>ของตัวกรองการอัปโหลดไฟล์ก่อนที่จะกรองอื่น web.xmlๆ หากคำขอไม่ใช่multipart/form-dataคำขอตัวกรองการอัปโหลดไฟล์จะดำเนินต่อไปราวกับว่าไม่มีอะไรเกิดขึ้น หากคุณใช้ตัวกรองที่เพิ่มโดยอัตโนมัติเนื่องจากใช้คำอธิบายประกอบ (เช่น PrettyFaces) คุณอาจต้องเพิ่มการสั่งซื้ออย่างชัดเจนผ่าน web.xml ดูวิธีกำหนดลำดับการเรียกใช้ตัวกรอง servlet โดยใช้คำอธิบายประกอบใน WAR

  2. เฉพาะในกรณีที่คุณใช้ตัวกรองการอัปโหลดไฟล์ PrimeFaces: มีอีกตัวหนึ่งFilterในเว็บแอปของคุณซึ่งทำงานก่อนตัวกรองการอัปโหลดไฟล์ PrimeFaces และทำการRequestDispatcher#forward()โทร โดยปกติแล้วตัวกรองการเขียน URL ใหม่เช่นPrettyFacesจะทำสิ่งนี้ สิ่งนี้จะทริกเกอร์ผู้FORWARDมอบหมายงาน แต่ตัวกรองจะรับฟังโดยค่าเริ่มต้นในREQUESTผู้มอบหมายงานเท่านั้น

    ในการแก้ไขปัญหานี้คุณต้องใส่ตัวกรองการอัปโหลดไฟล์ PrimeFaces ก่อนตัวกรองการส่งต่อหรือกำหนดค่าตัวกรองการอัปโหลดไฟล์ PrimeFaces ใหม่เพื่อฟังFORWARDผู้มอบหมายงานด้วย:

    <filter-mapping>
        <filter-name>primeFacesFileUploadFilter</filter-name>
        <servlet-name>facesServlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
  3. <h:form>มีที่ซ้อนกันเป็น สิ่งนี้ผิดกฎหมายใน HTML และพฤติกรรมของเบราว์เซอร์ไม่ได้ระบุไว้ บ่อยครั้งที่เบราว์เซอร์จะไม่ส่งข้อมูลที่คาดไว้เมื่อส่ง <h:form>ตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำรัง enctypeนี้จะสมบูรณ์โดยไม่คำนึงถึงรูปแบบของ เพียงแค่อย่ารังแบบฟอร์มเลย

หากคุณยังคงประสบปัญหาอยู่ให้ดีบักการรับส่งข้อมูล HTTP เปิดชุดเครื่องมือสำหรับนักพัฒนาเว็บเบราว์เซอร์ (กด F12 ใน Chrome / Firebug23 + / IE9 +) และตรวจสอบส่วน Net / Network หากส่วน HTTP ดูดีให้ดีบักโค้ด JSF วางจุดพักFileUploadRenderer#decode()และเดินหน้าจากที่นั่น


กำลังบันทึกไฟล์ที่อัปโหลด

หลังจากที่คุณใช้งานได้ในที่สุดคำถามถัดไปของคุณอาจเป็นเช่น "ฉันจะบันทึกไฟล์ที่อัปโหลดได้อย่างไร / ที่ไหน" ดียังคงที่นี่: วิธีการบันทึกไฟล์ที่อัปโหลดใน JSF


2
สาเหตุอีกประการหนึ่งอาจเกิดจากคุณไม่ได้ลงทะเบียนตัวกรองการอัปโหลด PrimeFaces web.xmlตามคู่มือผู้ใช้ PrimeFaces คุณอ่านมันหรือไม่? อย่างไรก็ตามนั่นไม่สามารถอธิบายได้ว่าทำไมถึงmode="simple"เหมาะกับคุณ
BalusC

1
ใช่ฉันอ่านแล้วและลงทะเบียนตัวกรองแล้ว แต่ฉันเพิ่งสังเกตว่ามันทำให้ฉันมีข้อผิดพลาดเมื่อเริ่มเซิร์ฟเวอร์ "SEVERE: WebModule [/ EventsCalendary] PWC1270: ข้อยกเว้นในการเริ่มตัวกรอง PrimeFaces FileUpload Filter" ฉันรู้สึกโง่มากที่ไม่ สังเกตเห็นมาก่อน มีเคล็ดลับในการแก้ไขข้อผิดพลาดนี้หรือไม่?
Rodrigo Cavalcante

2
บางทีการแมปตัวกรองอาจไม่ถูกต้อง มันจะต้องมีแมปบน<servlet-name>ของที่คุณได้ในที่กำหนดโดยFacesServlet web.xmlค่าเริ่มต้นโดย IDEs / code-generator ส่วนใหญ่เป็นFaces Servletแต่อาจเป็นสิ่งที่ดีfacesServletหรือเป็นสิ่งที่ยืนยันรูปแบบการตั้งชื่อได้มากกว่า
BalusC

2
Nevermind แก้ไขได้โดยการเพิ่ม commons-fileupload ลงใน classpath และ commons-io มีที่ใดบ้างที่บอกว่าจำเป็นต้องมีไลบรารีเหล่านี้ อย่างไรก็ตามทุกอย่างดูเหมือนจะใช้งานได้ในขณะนี้วิธีนี้กำลังถูกเรียกอย่างที่ควรจะเป็นขอบคุณ
Rodrigo Cavalcante

1
ดังนั้นทุกอย่างเกิดขึ้นพร้อมกับสถานการณ์ที่ฉันต่อต้านการกำหนดค่าเดียวกันใน TomEE และ JBoss .. forum.primefaces.org/viewtopic.php?f=3&t=43798
Dmitry Alexandrov

30

คุณใช้หน้าสวยด้วยเหรอ? จากนั้นตั้งค่าผู้มอบหมายงานเป็น FORWARD:

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

ปัญหานี้ยังคงเป็นปัญหาเมื่อใช้กับ OCP Rewrite ฉันเป็นหนี้คุณเบียร์ :)
Babl

7

จุดหนึ่งที่ฉันสังเกตเห็นจาก Primefaces 3.4 และ Netbeans 7.2:

ลบพารามิเตอร์ที่เติมอัตโนมัติ Netbeans สำหรับฟังก์ชัน handleFileUpload เช่น (เหตุการณ์) มิฉะนั้นเหตุการณ์อาจเป็นโมฆะ

<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>


0

ฉันมีปัญหาเดียวกันกับ Primefaces 5.3 และฉันได้อ่านทุกประเด็นที่อธิบายโดย BalusC โดยไม่มีผลลัพธ์ ฉันทำตามคำแนะนำของเขาเกี่ยวกับการดีบัก FileUploadRenderer # decode () และฉันพบว่า web.xml ของฉันตั้งค่าไม่ถูกต้อง

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

ค่าพาราต้องเป็น 1 ใน 3 ค่านี้ แต่ไม่ใช่ทั้งหมด !! ส่วนบริบทพารามิเตอร์ทั้งหมดสามารถลบออกได้และค่าเริ่มต้นจะเป็นอัตโนมัติ


0

bean.xhtml

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

</h:form>

Bean.java

@ManagedBean

การส่งคลาสสาธารณะของ @ViewScoped ดำเนินการต่ออนุกรมได้ {

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);

}

}

web.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>

คุณอธิบายได้ไหมว่าทำไมถึงเป็นคำตอบ? เป็นเพียงรหัสไม่ใช่คำอธิบายหรืออะไรก็ตาม
Kukeltje

"# {bean.uploadFile}" vs "# {bean.uploadFasta}" เอา update = "ข้อความ" ออกแล้วมันจะ (เท่านั้น) ที่เหมาะกับฉัน!
romsky

0

คำแนะนำทั้งสองข้อที่นี่ไม่มีประโยชน์สำหรับฉัน ดังนั้นฉันต้องดีบักไพรม์เฟซและพบว่าสาเหตุของปัญหาคือ:

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

จากนั้นฉันได้เพิ่มส่วนลงใน servlet ใบหน้าของฉันใน web.xml เพื่อแก้ไขปัญหา:

<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>

0

ฉันมีปัญหาเดียวกันเนื่องจากฉันมีการกำหนดค่าทั้งหมดที่อธิบายในโพสต์นี้ แต่ในกรณีของฉันเป็นเพราะฉันมีการนำเข้า jquery สองรายการ (หนึ่งในนั้นคือแบบสอบถามของไพรม์เฟซ) ซึ่งทำให้เกิดความขัดแย้งในการอัปโหลดไฟล์

ดูความขัดแย้งของ Primefaces Jquery


คุณไม่ได้รับข้อผิดพลาดเฉพาะในคอนโซลนักพัฒนาของเบราว์เซอร์ใช่ไหม
Kukeltje

@Kukeltje นี่คือสิ่งที่คอนโซลแสดงให้เห็น: Uncaught TypeError: Object [object Object] ไม่มีเมธอด 'fileupload'
Christian Altamirano Ayala

0

สำหรับผู้ที่ใช้ Tomee หรือ Tomcat และไม่สามารถใช้งานได้ให้ลองสร้างcontext.xmlในMETA-INFและเพิ่มallowCasualMultipartParsing = "true"

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

นี่เป็นการแก้ปัญหาสำหรับการกำหนดค่า / ลำดับตัวกรองที่ไม่ถูกต้อง
BalusC

สวัสดี @BalusC คุณช่วยอธิบายเพิ่มเติมได้ไหม มีวิธีที่ดีกว่านี้หรือไม่?
Xavier Lambros

ดูคำตอบของฉันในคำถามนี้
BalusC

0

ด้วย JBoss 7.2 (Undertow) และ PrimeFaces 6.0 org.primefaces.webapp.filter ควรลบ FileUploadFilter ออกจาก web.xml และควรตั้งค่าตัวอัปโหลดไฟล์พารามิเตอร์บริบทเป็นเนทีฟ:

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

ควร? คุณได้รับข้อผิดพลาดเฉพาะหรือไม่ถ้าคุณไม่ทำ?
Kukeltje

ใช่ FileUploadEvent ของฉันไม่เรียกใช้หากไม่มีการเปลี่ยนแปลงนี้
Alex D

นั่นไม่ใช่ข้อผิดพลาดที่ชัดเจนนั่นคือพฤติกรรมที่ไม่คาดคิด
Kukeltje
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.