简体   繁体   中英

oncomplete from Primefaces doesn't work with fileUpload and dialog

I'm having a lot of problems with fileupload and dialog from primefaces.

I have a button that calls a dialog when it is clicked. Inside this dialog I have a fileUpload. I want this dialog to close when I choose some file and update an image on the form. Here is the code:

<h:form id="formCadastroSistema">
  <div id="divCadastroComponenteConstrutivo">
    <h:outputText value="Cadastro de Componente Construtivo" style="font-size: 20px; color: black;"/>
    <p:layout style="height:240px; width: 100%; margin-top: 20px; padding-left: 40px;">
      <p:layoutUnit position="west" size="330" style="border: none;" resizable="false" >
        <p:graphicImage value="#{novoComponenteConstutivo.mostrarImagemDeByte()}" id="foto"/>
        <p:commandButton onclick="dialogUpLoad.show();" value="abrir"/>
      </p:layoutUnit>
      <p:layoutUnit position="center" style="font-size: 14px; border: none;">
        <h:panelGrid columns="2" cellspacing="5">
          <h:outputText value="Nome: "/>
          <p:inputText style="width: 295px;" value="#{novoComponenteConstutivo.novoComponenteConstrutivo.nome}"  />
          <h:outputText value="Categoria: "/>
          <p:selectOneMenu value="#{novoComponenteConstutivo.idCategoriaCamada}"  id="selectMenuCategoria" style="width: 305px;">
            <f:selectItems value="#{novoComponenteConstutivo.todasAsCategorias}" var="categoria" itemLabel="#{categoria.categoria}" itemValue="#{categoria.id}"/>
            <f:ajax event="valueChange" execute="selectMenuCategoria" listener="#{novoComponenteConstutivo.setarCategoriaDoNovoComponente()}" render="testi" />
          </p:selectOneMenu>
          <h:outputText value="Descrição: "/>
          <p:inputTextarea value="#{novoComponenteConstutivo.novoComponenteConstrutivo.descricao}" style="width: 295px; height: 50px;"/>
          <h:outputText value="Fabricante: "/>
          <p:selectOneMenu value="#{novoComponenteConstutivo.idFabricante}" id="selectMenuFabricante" style="width: 305px;">
            <f:selectItems value="#{novoComponenteConstutivo.todosOsFabricantes}" var="fabricante" itemLabel="#{fabricante.nome}" itemValue="#{fabricante.id}" />
            <f:ajax execute="selectMenuFabricante" event="valueChange" listener="#{novoComponenteConstutivo.setarFabricanteDoNovoComponente()}" render="testi2" />
          </p:selectOneMenu>

        </h:panelGrid>
        <h:outputText value="#{novoComponenteConstutivo.idCategoriaCamada}" id="testi"/>
        <h:outputText value="#{novoComponenteConstutivo.idFabricante}" id="testi2"/>
      </p:layoutUnit>
      <p:dialog style="height: 300px; width: 500px;" id="dialogUpLoad" widgetVar="dialogUpLoad" >
        <p:fileUpload fileUploadListener="#{novoComponenteConstutivo.uploadImagem}" update="foto" oncomplete="dialogUpLoad.hide();" multiple="false"  />
      </p:dialog>
    </p:layout>
    <p:separator/>
    <p:layout style="height: 150px; padding-left: 40px;" >
      <!--      -->
      <p:layoutUnit position="center" style="border: none;">
        <h:outputText value="Características Físicas" style="font-size: 18px;"/>
        <h:panelGrid columns="2" >
          <h:panelGrid columns="2" style="font-size: 14px; padding-top: 20px;" >
            <h:outputText value="Condutividade Térmica: "/>
            <p:inputText value="#{novoComponenteConstutivo.novoComponenteConstrutivo.condutividade}"  />
            <h:outputText value="Calor Específico: "/>
            <p:inputText value="#{novoComponenteConstutivo.novoComponenteConstrutivo.calorEspecifico}"/>
            <h:outputText value="Densidade Mínima: " />
            <p:inputText value="#{novoComponenteConstutivo.novoComponenteConstrutivo.densidadeMinima}"/>
          </h:panelGrid>
          <h:panelGrid columns="2"  style="font-size: 14px; padding-top: 20px; margin-left: 45px;" >
            <h:outputText value="Densidade Máxima: "/>
            <p:inputText  value="#{novoComponenteConstutivo.novoComponenteConstrutivo.densidadeMaxima}"/>
            <h:outputText value="Espessura: "/>
            <p:inputText value="#{novoComponenteConstutivo.novoComponenteConstrutivo.espessura}"/>
          </h:panelGrid></h:panelGrid>
        </p:layoutUnit>
      </p:layout>
      <h:commandLink value="confirm" style="position: absolute; right: 0px; font-size: 12px;" onclick="showDivConfirmacaoCadastroComponente();" >
        <f:ajax execute="@form" render=":formConfimacaoCadastroComponente" event="click"   />
      </h:commandLink>
    </div>
  </h:form>

It works on google chrome and FireFox, but IE the dialog doesn't close and the image doesn't update.

It could be because the component ID and the widgetVar is the same.

 id="dialogUpLoad" widgetVar="dialogUpLoad"

Please refer to this SO question as well.

Yes, like say user1351585, change the name of your id="dialogUpload" and add on web.xml the follow code:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM