<h:inputFile /> ajax 上传错误:未定义 partialResponse

Error on <h:inputFile /> ajax upload: partialResponse is not defined

应用程序需要导入 excel 个文件 (.xlsx) 来填充一个数据库 table。当我尝试通过 AJAX 上传文件时出现问题。永远不会调用验证器(也永远不会调用侦听器)。当我尝试上传文件时,JSF AJAX JavaScript 文件抛出错误并显示在浏览器的控制台中:TypeError: partialResponse is not defined.

我的第一个想法是这是一个错误,但我不确定。这是我的第一个 JSF 项目。

<h:form id="travels-form" class="toolbar ui form" enctype="multipart/form-data">
    <div class="five wide field">
        <input type="text" id="search" placeholder="Buscar..." />
    </div>
    <div class="actions">
        <div class="inline field wide">
            <h:selectOneMenu valueChangeListener="#{travelBean.filter}" >
                <f:selectItem itemValue="" itemLabel="Todas las placas"  />
                <f:selectItems value="#{travelBean.licensePlates}" var="plate"
                               itemValue="${plate}" itemLabel="${plate}" />
                <f:ajax execute="@this" render=":tblTravels" />
            </h:selectOneMenu>
        </div>
        <h:outputLabel for="excel" value="Excel" styleClass="ui positive button" />
        <h:inputFile id="excel" value="#{excelImporterBean.workbook}"
                     validator="#{excelImporterBean.validate}"
                     style="display: none">
            <f:ajax execute="@this" render="excelMessage :tblTravels"
                    listener="#{excelImporterBean.onLoadWorkbook}"/>
        </h:inputFile>
        <h:message id="excelMessage" for="excel" errorClass="error-message"/>
        <h:outputLink value="#{request.contextPath}/home/recorridos/nuevo"
                      styleClass="ui primary button">
            Registrar
        </h:outputLink>
    </div>
</h:form>

这是 ExcelImporterBean 方法(验证器和侦听器):

public void onLoadWorkbook(AjaxBehaviourEvent ev) {
        excelImporter.importWorkbook(workbook);
    }

    public void validate(FacesContext ctx, UIComponent comp, Object value) {
        FacesMessage message = null;
        Part _workbook = (Part) value;

        if(((Part) value).getContentType().equals(EXCEL_TYPE)) {
            message = new FacesMessage("Solo archivos excel 2007+ (.xlsx)");
        }
        if(message != null) {
            throw new ValidatorException(message);
        }
    }

该应用 运行 于:

编辑

问题是由于重写(在 PrettyFaces 之前)。要解决此问题,您需要在 META-INF 内的 context.xml 文件中添加属性 allowCasualMultipartParsing="true"。示例:

<Context path="/MyApp" allowCasualMultipartParsing="true">
  <Resource auth="Container" 
            factory="org.jboss.weld.resources.ManagerObjectFactory" 
            name="BeanManager" 
            type="javax.enterprise.inject.spi.BeanManager"/>
</Context>