I can not display files in a new tab

0

I have a page with a list of attached files that when clicked should open in a new browser tab. But when clicking on the file a new tab is opened and Error 404 appears. The file is being saved in a folder and only your reference is saved in the database. Some parts of the code have been hidden so as not to overwrite the character limit.

View

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:p="http://primefaces.org/ui"
            xmlns:jsp="http://java.sun.com/JSP/Page"
            template="template.xhtml">

<ui:define name="content">
    // PARTES OMITIDAS

    <h:form>
        <p:panel id="panelTermoDeAbertura">

            <f:facet name="header">
                <h:outputText value="#{livroOrdemController.livroOrdem.dataCriacao}">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </h:outputText>
                <h:outputText value=" - TERMO DE ABERTURA DO LIVRO DE ORDEM"/>
            </f:facet>

            <h:panelGrid columns="2" cellpadding="10">

                <h:outputLabel value="Numero da ART: "/>

                <h:outputText
                    value="#{livroOrdemController.art.numeroArt}"/>          

                <h:outputLabel value="Nome do Proprietário: "/>
                <h:outputText
                    value="#{livroOrdemController.art.nomeProprietario}"/>

                <h:outputLabel value="Endereço da Obra: "/>
                <h:outputText
                    value="#{livroOrdemController.art.enderecoObraServico.tipoLogradouro} #{livroOrdemController.art.enderecoObraServico.logradouro}, 
                              Nº #{livroOrdemController.art.enderecoObraServico.numero}, 
                              CEP: #{livroOrdemController.art.enderecoObraServico.cep}, 
                              #{livroOrdemController.art.enderecoObraServico.bairro}, 
                              #{livroOrdemController.art.enderecoObraServico.cidade} - #{livroOrdemController.art.enderecoObraServico.uf}"/>

                <h:outputLabel value="Data Real do Início da Obra: "/>
                <h:outputText
                    value="#{livroOrdemController.livroOrdem.dataRealInicioObra}">

                    <f:convertDateTime pattern="dd/MM/yyyy" />

                </h:outputText>

                <p:commandButton value="Adicionar Relato"
                                 onclick="dialogRelato.show();"
                                 icon="inserir"/>

                <p:commandButton value="Imprimir Livro de Ordem"
                                 icon="impressao"/>
            </h:panelGrid>

        </p:panel>

        <br />

        <p:dialog id="dialogRelato"
                  showEffect="fade" hideEffect="fade"
                  modal="true" header="Novo Relato"
                  widgetVar="dialogRelato" minHeight="40"
                  resizable="false">

            <p:messages id="menssagens" autoUpdate="true" closable="true" />

                <b>
                    <h:outputLabel value="Tipo de Relato: " />
                </b>
                <h:selectOneMenu style="height: 20px; background-color: #ffffff;"
                                 value="#{livroOrdemController.tipoRelatoSelecionado}"
                                 title="Tipo de Relato"
                                 converter="tipoRelatoConverter">

                    <f:selectItems value="#{livroOrdemController.preencherComboTiposRelatos()}"/>
                </h:selectOneMenu>
                <br />
                <br />

                <b>
                    <h:outputLabel for="calendarDataOcorrencia" value="Data da Ocorrencia: " />
                </b>
                <p:calendar id="calendarDataOcorrencia"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{livroOrdemController.dataOcorrencia}">
                    <p:ajax event="dateSelect" listener="#{livroOrdemController.onDataOcorrenciaSelect()}"/>
                </p:calendar>
                <br />
                <br />
                <b>
                    <h:outputLabel value="Fase da Obra/Serviço: " />
                </b>
                <h:selectOneMenu style="height: 20px; background-color: #ffffff;"
                                 value="#{livroOrdemController.faseObraServicoSelecionada}"
                                 title="Fase da Obra/Serviço"
                                 converter="faseObraServicoConverter">
                    <f:selectItems value="#{livroOrdemController.preencherComboFaseObraServico()}"/>
                </h:selectOneMenu>
                <br />
                <br />

                <b>
                    <h:outputLabel for="calendarInicioFase" value="Inicio da Fase: " />
                </b>
                <p:calendar id="calendarInicioFase"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{livroOrdemController.dataIncioFase}">
                    <p:ajax event="dateSelect" listener="#{livroOrdemController.onDataInicioFaseSelect()}"/>
                </p:calendar>
                <br />
                <br />

                <b>
                    <h:outputLabel for="calendarFimFase" value="Términio da Fase: " />
                </b>
                <p:calendar id="calendarFimFase"
                            pattern="dd/MM/yyyy"
                            showOn="button"
                            value="#{livroOrdemController.dataTerminioFase}">
                    <p:ajax event="dateSelect" listener="#{livroOrdemController.onDataTerminioFaseSelect()}"/>
                </p:calendar>
                <br />
                <br />

                <b>
                    <h:outputLabel for="inputDescricaoRelato" value="Descrição: " />
                </b>
                <br />
                <h:inputTextarea id="inputDescricaoRelato"
                                 value="#{livroOrdemController.descricao}"
                                 cols="40"
                                 rows="5"/>
                <br />
                <br />

                <p:commandButton value="Adicionar Relato"
                                 action="#{livroOrdemController.adicionarRelato()}"
                                 process="@this,dialogRelato"
                                 onsuccess="dialogRelato.hide(); dialogAnexoRelato.show();"/>


                <p:commandButton value="Cancelar"
                            onclick="dialogRelato.hide();" />
       </p:dialog>

        <p:dialog id="dialogAnexoRelato"
                  resizable="false"
                  showEffect="fade" hideEffect="fade"
                  modal="true" header="Novo Relato"
                  widgetVar="dialogAnexoRelato" minHeight="70">

                <p:fileUpload fileUploadListener="#{livroOrdemController.handleFileUploadRelato}"
                              allowTypes="/(\.|\/)(gif|png|jpe?g|pdf)$/"
                              sizeLimit="10000000"
                              label="Anexar Arquivos"
                              multiple="true"
                              mode="advanced"
                              auto="true"
                              showButtons="false"
                              process="@this"
                              dragDropSupport="true"/>

                <ui:repeat var="arquivo" value="#{livroOrdemController.arquivosRelatos}">
                    <p:column>

                        <p:commandButton actionListener="#{livroOrdemController.excluirArquivo(arquivo)}" 
                                         icon="excluir" update="#{livroOrdemController.componentes}" />

                        <h:outputText value="#{arquivo.nomeArquivo}"/>

                    </p:column>
                </ui:repeat>

                <p:commandButton value="Enviar Anexos"                                  
                                 oncomplete="dialogAnexoRelato.hide();"
                                 process="@this,dialogRelato"/>

                <p:commandButton value="Cancelar"
                                 onclick="dialogAnexoRelato.hide();" />

        </p:dialog>
        <ui:repeat var="itemRelato" value="#{livroOrdemController.relatos}">

                <p:panel id="panelRelato">
                    <f:facet name="header">

                        <h:outputText value="#{itemRelato.dataOcorrencia}">
                            <f:convertDateTime pattern="dd/MM/yyyy" />
                        </h:outputText>
                        <h:outputText value=" - #{itemRelato.tipoRelato.descricao}"/>

                    </f:facet>

                    <h:outputLabel value="Fase da Obra: "/>
                    <h:outputText value="#{itemRelato.faseObraServico.descricao}"/>
                    <br />

                    <h:outputLabel value="Inicio da Fase: "/>
                    <h:outputText value="#{itemRelato.dataIncioFase}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                    <br />

                    <h:outputLabel value="Términio da Fase: "/>
                    <h:outputText value="#{itemRelato.dataTerminioFase}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                    <br />

                    <h:outputLabel value="Descrição: "/><br />
                    <h:outputText value="#{itemRelato.descricao}"/>
                    <br />

                    <b>
                        <h:outputLabel value="Retificações/Complementos: "/>
                    </b>

                    <ui:repeat var="itemRetificacao" value="#{livroOrdemController.recuperarRetificacoes(itemRelato.idRelato)}"
                               varStatus="statusRetificacao">

                        <li>
                            <h:outputText value="#{itemRetificacao.descricao}"/>

                            <ui:repeat var="itemAnexoRetificacao"
                                       value="#{livroOrdemController.recuperarAnexosRetificacoes(itemRetificacao.idRetificacaoRelato)}">

                                <li style="padding-left:20px">
                                    <a href="#{itemAnexoRetificacao.caminhoVerArquivo}" target="_blank">
                                        <h:outputText value="#{itemAnexoRetificacao.nomeArquivo}"/>
                                    </a>
                                </li>

                            </ui:repeat>

                        </li>

                    </ui:repeat>

                    <br />

                    <p:commandButton value="Retificar Relato"
                                     onclick="dialogRetificacao.show();">

                        <f:setPropertyActionListener value="#{itemRelato}" target="#{livroOrdemController.relatoASerRetificado}"/>

                    </p:commandButton>
                    <br />
                    <br />
                    <ui:repeat var="itemAnexoRelato"
                               value="#{livroOrdemController.recuperarAnexosRelatos(itemRelato.idRelato)}">
                        <li>
                            <h:outputText value="#{itemAnexoRelato.nomeArquivo}"/>
                        </li>
                    </ui:repeat>
                </p:panel>

                <br />

        </ui:repeat>

        <p:panel rendered="#{livroOrdemController.livroOrdem.encerrado}">
            <f:facet name="header">
                <h:outputText value="LIVRO DE ORDEM ENCERRADO"/>
            </f:facet>

        </p:panel>

        <p:dialog id="dialogRetificacao" showEffect="fade" hideEffect="fade"
                  modal="true" header="Retificar/Complementar um Relato"
                  widgetVar="dialogRetificacao" minHeight="40">

            <b>
                <h:outputLabel value="Tipo de Relato: " />
            </b>
            <h:outputText id="tipoRelato" value="#{livroOrdemController.relatoASerRetificado.tipoRelato.descricao}"/>
            <br />

            <b>
                <h:outputLabel value="Data da Ocorrência: " />
            </b>
            <h:outputText id="dataOcorrencia" value="#{livroOrdemController.relatoASerRetificado.dataOcorrencia}">
                <f:convertDateTime pattern="dd/MM/yyyy" />

            </h:outputText>
            <br />

            <b>
                <h:outputLabel value="Fase da Obra/Serviço: " />
            </b>
            <h:outputText id="faseObraServico" value="#{livroOrdemController.relatoASerRetificado.faseObraServico.descricao}"/>
            <br />

            <b>
                <h:outputLabel value="Inicio da Fase: " />
            </b>
            <h:outputText id="inicioFase" value="#{livroOrdemController.relatoASerRetificado.dataIncioFase}">
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:outputText>
            <br />

            <b>
                <h:outputLabel value="Términio da Fase: " />
            </b>
            <h:outputText id="terminioFase" value="#{livroOrdemController.relatoASerRetificado.dataTerminioFase}">
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:outputText>
            <br />

            <b>
                <h:outputLabel value="Descrição: " />
            </b>
            <br />
            <h:inputTextarea id="descricaoRetificacao"
                             value="#{livroOrdemController.descricaoRetificacao}"
                             cols="40" rows="5"/>

            <br />

            <p:commandButton value="Retificar/Complementar Relato"
                             process="@this,dialogRetificacao"
                             onsuccess="dialogRetificacao.hide();dialogAnexoRetificacao.show();"
                             action="#{livroOrdemController.retificarRelato()}"
                             update="@([id$=panelRelato])"/>

            <p:commandButton value="Cancelar"
                             onclick="dialogRetificacao.hide();" />

        </p:dialog>

        <p:dialog id="dialogAnexoRetificacao"
                  resizable="false"
                  showEffect="fade" hideEffect="fade"
                  modal="true" header="Novo Relato"
                  widgetVar="dialogAnexoRetificacao" minHeight="70">
            <b>
                <h:outputLabel value="Anexo de Arquivos: "/>
            </b>
            <p:fileUpload fileUploadListener="#{livroOrdemController.handleFileUploadRetificacao}"
                          allowTypes="/(\.|\/)(gif|png|jpe?g|pdf)$/"
                          sizeLimit="10000000"
                          label="Anexar Arquivos"
                          multiple="true"
                          mode="advanced"
                          auto="true"
                          showButtons="false"
                          process="@this"
                          dragDropSupport="true"/>

            <p:commandButton value="Enviar Anexos"
                             oncomplete="dialogAnexoRetificacao.hide();"
                             process="@this,dialogAnexoRetificacao"
                             action="#{livroOrdemController.retificarRelato()}"
                             update="@([id$=panelRelato])"/>

            <p:commandButton value="Cancelar"
                             onclick="dialogAnexoRetificacao.hide();" />
        </p:dialog>

    </h:form>

</ui:define>

Controller

@ManagedBean
@ViewScoped
public class LivroOrdemController {
    // ALGUMAS VARIÁVEIS OCULTADAS
    private RetificacaoRelato retificacaoRelato;
private Relato relatoASerRetificado;
private List<Relato> relatos = new ArrayList<Relato>();

private UploadedFile uploadedFile;
private ArquivoRelato arquivoRelato;
private List<ArquivoRelato> arquivosRelatos = new ArrayList<ArquivoRelato>();
private boolean anexoRequired;

public LivroOrdemController() {
}

@PostConstruct
public void inicializar() {
    relato = new Relato();
    retificacaoRelato = new RetificacaoRelato();
}

public void recuperarNumeroArt(ValueChangeEvent valueChangeEvent) {
    numeroArt = valueChangeEvent.getNewValue().toString();

    recuperarLivroOrdem();
    recuperarRelatos();
    recuperarArt();
    encerrarLivroOrdem();
}

public void recuperarArt() {        
    art = artDao.pesquisarPorId(numeroArt);
}

// PARTE OCULTADA

public SelectItem[] preencherComboTiposRelatos() {
    SelectItem[] options = null;
    String query = "SELECT tr FROM TipoRelato tr";
    List<TipoRelato> tipoRelatos = tipoRelatoDao.listPesq(query);

    if (tipoRelatos != null && tipoRelatos.size() > 0) {
        int i = 0;
        options = new SelectItem[tipoRelatos.size() + 1];
        options[i++] = new SelectItem(null, "Selecione...");

        for (TipoRelato tr : tipoRelatos) {
            options[i++] = new SelectItem(tr, tr.getDescricao());
        }
    }

    return options;
}

public SelectItem[] preencherComboFaseObraServico() {
    SelectItem[] options = null;
    String query = "SELECT fos FROM FaseObraServico fos";
    List<FaseObraServico> faseObraServicos = faseObraServicoDao.listPesq(query);

    if (faseObraServicos != null && faseObraServicos.size() > 0) {
        int i = 0;
        options = new SelectItem[faseObraServicos.size() + 1];
        options[i++] = new SelectItem(null, "Selecione...");

        for (FaseObraServico fo : faseObraServicos) {
            options[i++] = new SelectItem(fo, fo.getDescricao());
        }
    }

    return options;
}

public void recuperarRelatos() {
    Map<String, Object> params = new HashMap<String, Object>();
    String queryRelato = "SELECT r.idRelato, r.dataOcorrencia, r.dataIncioFase, r.dataTerminioFase, r.descricao AS descricaoRelato, "
            + "tr.descricao AS tiporelato, fos.descricao AS faseobraservico "
            + "FROM Relato r "
            + "LEFT JOIN TipoRelato tr ON tr.idTipoRelato = r.tiporelato_idtiporelato "
            + "LEFT JOIN FaseObraServico fos ON fos.idFaseObraServico = r.faseobraservico_idfaseobraservico "
            + "WHERE r.livroordem_idlivroordem = :idlivroordem ORDER BY dataocorrencia DESC";

    params.put("idlivroordem", livroOrdem.getIdLivroOrdem());
    List<Object[]> objects = objectDao.listPesqQuery(queryRelato, params);

    for (Object[] o : objects) {
        Relato relatoTemp = new Relato();
        BigInteger id = (BigInteger) o[0];
        relatoTemp.setIdRelato(id.longValue());
        relatoTemp.setDataOcorrencia((Date) o[1]);
        relatoTemp.setDataIncioFase((Date) o[2]);
        relatoTemp.setDataTerminioFase((Date) o[3]);
        relatoTemp.setDescricao((String) o[4]);

        relatoTemp.setTipoRelato(new TipoRelato());
        relatoTemp.getTipoRelato().setDescricao((String) o[5]);
        relatoTemp.setFaseObraServico(new FaseObraServico());
        relatoTemp.getFaseObraServico().setDescricao((String) o[6]);

        relatos.add(relatoTemp);
    }
}

   public List<RetificacaoRelato> recuperarRetificacoes(Long idRelato) {
        List<RetificacaoRelato> retificacoes = new ArrayList<RetificacaoRelato>();
        Map<String, Object> params = new HashMap<String, Object>();
        String queryRetificacoes = "SELECT rr.idRetificacaoRelato, rr.descricao FROM RetificacaoRelato rr "
            + "WHERE rr.relato_idrelato = :idrelato";
        params.put("idrelato", idRelato);

    List<Object[]> objects = objectDao.listPesqQuery(queryRetificacoes, params);

    for (Object[] o : objects) {
        RetificacaoRelato retificacaoRelatoTemp = new RetificacaoRelato();

        BigInteger id = (BigInteger) o[0];
        retificacaoRelatoTemp.setIdRetificacaoRelato(id.longValue());
        retificacaoRelatoTemp.setDescricao((String) o[1]);
        retificacoes.add(retificacaoRelatoTemp);
    }

    return retificacoes;
}

   public List<ArquivoRelato> recuperarAnexosRetificacoes(Long idRetificacao) {
       List<ArquivoRelato> arquivosRetificacao = new ArrayList<ArquivoRelato>();
       Map<String, Object> params = new HashMap<String, Object>();
       String queryArquivoRetificacoes = "SELECT aret.caminhoverarquivo FROM ArquivoRelato aret "
            + "WHERE aret.retificacaorelato_idretificacaorelato = :idRetificacao";
        params.put("idRetificacao", idRetificacao);

       List<Object> objects = objectDao.listPesqQueryUmParametro(queryArquivoRetificacoes, params);

    for(Object o : objects) {
        ArquivoRelato arquivoRelatoTemp = new ArquivoRelato();
        arquivoRelatoTemp.setCaminhoVerArquivo((String) o);
        arquivoRelatoTemp.setNomeArquivo(arquivoRelatoTemp.getCaminhoVerArquivo());
        arquivosRetificacao.add(arquivoRelatoTemp);
    }

    return arquivosRetificacao;
    }

   public List<ArquivoRelato> recuperarAnexosRelatos(Long idRelato) {
       List<ArquivoRelato> arquivosRelato = new ArrayList<ArquivoRelato>();
       Map<String, Object> params = new HashMap<String, Object>();
       String queryArquivoRetificacoes = "SELECT arel.caminhoverarquivo FROM ArquivoRelato arel "
            + "WHERE arel.relato_idrelato = :idRelato";
       params.put("idRelato", idRelato);

       List<Object> objects = objectDao.listPesqQueryUmParametro(queryArquivoRetificacoes, params);

       for(Object o : objects) {
           ArquivoRelato arquivoRelatoTemp = new ArquivoRelato();
           arquivoRelatoTemp.setCaminhoVerArquivo((String) o);
        arquivoRelatoTemp.setNomeArquivo(arquivoRelatoTemp.getCaminhoVerArquivo());
           arquivosRelato.add(arquivoRelatoTemp);
      }

       return arquivosRelato;
  }

   public void handleFileUploadRelato(FileUploadEvent event) throws IOException {  
      UploadedFile item = event.getFile();

      Calendar c = Calendar.getInstance();
      int mes = c.get(Calendar.MONTH);
      mes++;
      String complementoDir = c.get(Calendar.YEAR) + "/" + mes + "/" + 
      c.get(Calendar.DAY_OF_MONTH) + "/";
      String sDiretorio = 
      SistemaConstante.CAMINHO_ARQUIVOS_LIVRO_ORDEM + complementoDir;
      String sCaminho = 
      SistemaConstante.DIRETORIO_ARQUIVOS_LIVRO_ORDEM + complementoDir;
      String nomeArquivo = item.getFileName().replace("\", File.separator);
      File diretorio = new File(sDiretorio);

      boolean diretorioCriado = true;

       if (!diretorio.exists()) {
           if (!diretorio.mkdir()) {
               if (!diretorio.mkdirs()) {
                   FacesUtils.mensFatal("Falha na criação do diretório!");
                   diretorioCriado = false;
              }
          }
       }

      if(diretorioCriado) {
          String aux = removerAcentos(nomeArquivo);
          String caminhoArquivo = sDiretorio + aux;
          String caminhoVerArquivo = sCaminho + aux;
          File arquivo = new File(caminhoArquivo);

          OutputStream out = new FileOutputStream(arquivo);
          out.write(item.getContents());
          out.close();

          ArquivoRelato arqRelato = new ArquivoRelato();
          arqRelato.setCaminhoArquivo(caminhoArquivo);
          arqRelato.setCaminhoVerArquivo(caminhoVerArquivo);
          arqRelato.setRelato(relato);
          arquivoRelatoDao.salvar(arqRelato);
          arquivosRelatos.add(arqRelato);

          FacesUtils.mensInfo("Arquivo(s) enviado(s) com sucesso!");
      }
   }

   public void handleFileUploadRetificacao(FileUploadEvent event) throws IOException {  
        UploadedFile item = event.getFile();

        Calendar c = Calendar.getInstance();
        int mes = c.get(Calendar.MONTH);
        mes++;
        String complementoDir = c.get(Calendar.YEAR) + "/" + mes + "/" + c.get(Calendar.DAY_OF_MONTH) + "/";
        String sDiretorio = SistemaConstante.CAMINHO_ARQUIVOS_LIVRO_ORDEM + complementoDir;
        String sCaminho = SistemaConstante.DIRETORIO_ARQUIVOS_LIVRO_ORDEM + complementoDir;
        String nomeArquivo = item.getFileName().replace("\", File.separator);
        File diretorio = new File(sDiretorio);

        boolean diretorioCriado = true;

       if (!diretorio.exists()) {
           if (!diretorio.mkdir()) {
               if (!diretorio.mkdirs()) {
                    FacesUtils.mensFatal("Falha na criação do diretório!");
                    diretorioCriado = false;
               }
           }
      }

      if(diretorioCriado) {
          String aux = removerAcentos(nomeArquivo);
          String caminhoArquivo = sDiretorio + aux;
          String caminhoVerArquivo = sCaminho + aux;
          File arquivo = new File(caminhoArquivo);

      OutputStream out = new FileOutputStream(arquivo);
      out.write(item.getContents());
      out.close();

      ArquivoRelato arqRelato = new ArquivoRelato();
      arqRelato.setCaminhoArquivo(caminhoArquivo);
      arqRelato.setCaminhoVerArquivo(caminhoVerArquivo);
      arqRelato.setRetificacaoRelato(retificacaoRelato);
      arquivoRelatoDao.salvar(arqRelato);
      arquivosRelatos.add(arqRelato);

      FacesUtils.mensInfo("Arquivo(s) enviado(s) com sucesso!");
    }
    }
   }
    
asked by anonymous 26.12.2018 / 15:31

0 answers