Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro no sumarioPath.

Boa tarde,

Os sumários estão sendo gravados com sucesso, contudo o problema esta na listagem deles. Exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/produtos/lista.jsp at line 62

59:

${produtos.nome}
60:
${produtos.descricao}
61:
<c:url value='/${product.sumarioPath}' />
62:
<a href="<c:url value='/${produtos.summaryPath}'/>" 63: target="_blank">sumário
64: 
65:

Produtos Controller

  public ModelAndView gravar(MultipartFile sumario,@Valid Produtos produto, BindingResult result,
                RedirectAttributes redirectAttributes) {

        new FileSaver();
        System.out.println(sumario.getOriginalFilename());

        if(result.hasErrors()) {
            return cadastro(produto);
        }


        String path = fileSaver.write("WEB-INF/views/produtos/arquivos-sumario", sumario);
        produto.setSumarioPath(path);


        produtoDao.gravar(produto);


        redirectAttributes.addFlashAttribute("sucesso","Produto cadastrado com sucesso!");

        return new ModelAndView("redirect:produtos");


    }

FileSaver

iinsira seu código apackage br.com.oncolor.infra;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Component
public class FileSaver {

    @Autowired
    private HttpServletRequest request;

    public String write(String baseFolder, MultipartFile file) {
        try {
            String realPath = request.getServletContext().getRealPath("/"+ baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));

            return baseFolder+ "/" + file.getOriginalFilename();

        } catch (IllegalStateException | IOException e) {
            throw new RuntimeException(e);
        } 
    }

}

OBS:está duplicado,pois há +/-5 dias sem resposta

11 respostas

Oi Nilton,

eu achei estranho que vc usou uma vez:

<c:url value='/${product.sumarioPath}' />

e outra vez:

"<c:url value='/${produtos.summaryPath}'/>"

Deve ser produtos ou product?

abs

Boa tarde professor, foi erro meu, seria produtos,estou acompanhando a video aula e tmb com o livro Springmvc da casa do codigo,ai acabei embaralhando os 2.

Agora a pagina carrega,mas as imagens dos livros ñ, aparece apenas o sumário


Lista.jsp


    <table>
        <tr>
        <td>Título</td>
        <td>Descrição</td>
        <td>Imagem</td>
        </tr>

        <c:forEach items="${produtos}" var="produtos">
                <tr>
                    <td>${produtos.nome}</td>
                    <td>${produtos.descricao}</td>
                    <td><c:url value='/${produtos.sumarioPath}' /></td>
                    <td><img  src="<c:url value='/${produtos.sumarioPath}' />"></td>
                        tmb tentei deste jeito
                 <td><img  src="/${produtos.sumarioPath}"></td>
                </tr>

            </c:forEach>
    </table>

AppWebConfiguration

@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { 
            registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
            registry.addResourceHandler("/WEB-INF/views/produtos/arquivos-sumario/**").addResourceLocations("/imagens/WEB-INF/views/produtos/imagens/");
        }

        @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
            configurer.enable(); }

Oi Nilton,

as imagens não podem ficar n diretório /WEB-INF/... pois ele não é acessível pela requisição HTTP (não é permitido pela especificacao servlets).

Grave as imagens em uma pasta fora do /WEB-INF/...., por exemplo na pasta /resources/imagens e tente novamente.

Tudo bem?

abs

Mudei professor,porém continua a mesma coisa.


Produtos

private String sumarioPath;
public String getSumarioPath() {
        return sumarioPath;
    }

public void setSumarioPath(String sumarioPath) {
        this.sumarioPath = sumarioPath;
    }

Lista

    <table>
        <tr>
        <td>Título</td>
        <td>Descrição</td>
        <td>Imagem</td>
        </tr>

        <c:forEach items="${produtos}" var="produtos">
                <tr>
                    <td>${produtos.nome}</td>
                    <td>${produtos.descricao}</td>
                    <td><c:url value='/${produtos.sumarioPath}' /></td>
                    <td><img  src="/${produtos.sumarioPath}"></td>
                </tr>

            </c:forEach>
    </table>

Estava pesquisando sobre o BufferedImage, entedi +/- q ele pode ser utilizado para guardar imagem no servidor. Entretanto,tudo para de funcionar...


Erro https://gist.github.com/njguilhem2/a6bf76b613511a18b6b9b74464d1ae16


Classe Produtos

private BufferedImage sumarioPath;
    public void setSumarioPath(BufferedImage sumarioPath) {
        this.sumarioPath = sumarioPath;
    }
public BufferedImage getSumarioPath() {
        return sumarioPath;
    }

Depois de arrumar o código, aqui fico sem saída. FileSaver


public BufferedImage write(String baseFolder, MultipartFile file) {
        try {
            String realPath = request.getServletContext().getRealPath("/"+ baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));

            return baseFolder+ "/" + file.getOriginalFilename();

        } catch (IllegalStateException | IOException e) {
            throw new RuntimeException(e);
        } 
    }
solução

Oi Nilton,

vc precisa mudar o caminho no ProdutosController no metodo gravar:

String path = fileSaver.write("resources/arquivos-sumario", sumario);

A pasta arquivos-sumario deve existir dentro da pasta src/main/webapp/resources:

src/main/webapp/resources/arquivos-sumario

Alem disso, vc precisa ajustar o caminho na tag img no JSP:

 <c:url value="/resources" var="resources" />

<c:forEach items="${produtos}" var="produto">
 <tr>
  <td>${produto.nome}</td>
  <td>${produto.descricao}</td>
  <td><c:url value='/${produto.sumarioPath}' /></td>
  <td><img src="${resources}/${produto.sumarioPath}"></td>
 </tr>
</c:forEach>

Espero ter errado em nada!!!

abs

Está tudo conforme suas instruções.

Stark.jpg:1 Failed to load resource: the server responded with a status of 404 (Not Found)

3.jpg:1 Failed to load resource: the server responded with a status of 404 (Not Found)

Seu_madruga.jpg:1 Failed to load resource: the server responded with a status of 404 (Not Found)

Oi Nilton, vc tem o link do projeto no github?

abs

Desculpa a bagunça professor, ainda estou aprendendo a usar o github

https://github.com/njguilhem2/Oncolorzip

Oi Nilton, vou precisar o projeto inteiro com o codigo fonte e toda estrutura dos pacotes.

Obrigado, Nico

Desculpa a demora professor, estava aprendendo a utilizar o git.

https://github.com/njguilhem2/Estudo