Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Arquivo de sumário

Não estou conseguindo enviar o arquivo de sumário para o servidor, estou sendo redirecionado para o form como se estivesse ocorrendo algum erro de validação.

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Casa do Código</title>
</head>
<body>

    <h1>Veja bem vindo a Casa do Código</h1>
    <h2>Cadastro de Produtos</h2>

    <form:form action="${s:mvcUrl('PC#gravar').build() }" method="post" commandName="produto" enctype="multipart/form-data">
        <fieldset>
            <legend>Dados do produto</legend>
            <div>
                <label for="titulo">Título:</label>
                <form:input path="titulo" placeholder="Digite o título"/>
                <form:errors path="titulo"></form:errors>
            </div>
            <div>
                <label for="descricao">Descrição:</label>
                <form:textarea path="descricao" rows="10" cols="30" placeholder="Digite a descrição"/>
                <form:errors path="descricao"></form:errors>
            </div>
            <div>
                <label for="paginas">Páginas:</label>
                <form:input path="paginas" placeholder="Qtde de páginas"/>
                <form:errors path="paginas"></form:errors>
            </div>
            <div>
                <label>Data de Lançamento</label>
                <form:input path="dataLancamento"/>
                <form:errors path="dataLancamento"/>
            </div>
            <div>
                <label>Sumário:</label>
                <input name="sumarioPath" type="file" />
            </div>
            <div>
                <c:forEach items="${tiposPreco}" var="tipoPreco" varStatus="status">
                    <label for="${tipoPreco}">${tipoPreco}</label>
                    <form:input path="precos[${status.index}].valor" placeholder="Valor do ${tipoPreco}"/>
                    <form:hidden path="precos[${status.index}].tipo" value="${tipoPreco}"/>
                </c:forEach>
            </div>
        </fieldset>
        <button type="submit">Cadastrar</button>
        <a href="/casadocodigo/"><button type="button">Voltar</button></a>
    </form:form>

</body>
</html>
package br.com.casadocodigo.loja.configurantion;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.format.datetime.DateFormatterRegistrar;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.format.support.FormattingConversionService;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import br.com.casadocodigo.loja.controllers.HomeController;
import br.com.casadocodigo.loja.dao.ProdutoDAO;
import br.com.casadocodigo.loja.infra.FileSaver;

@EnableWebMvc
@ComponentScan(basePackageClasses = { HomeController.class, ProdutoDAO.class, FileSaver.class })
public class WebAppConfiguration {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/message");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;
    }

    @Bean
    public FormattingConversionService mvcConversionService() {
        DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
        DateFormatterRegistrar formatterRegistrar = new DateFormatterRegistrar();

        formatterRegistrar.setFormatter(new DateFormatter("dd/MM/yyyy"));
        formatterRegistrar.registerFormatters(conversionService);

        return conversionService;
    }

    @Bean
    public MultipartResolver multipartResolver() {
        return new StandardServletMultipartResolver();
    }

}
package br.com.casadocodigo.loja.configurantion;

import javax.servlet.Filter;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebAppConfiguration.class, JPAConfiguration.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[] { characterEncodingFilter };
    }

    @Override
    protected void customizeRegistration(Dynamic registration) {
        registration.setMultipartConfig(new MultipartConfigElement(""));
    }

}
package br.com.casadocodigo.loja.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 gravar(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);
        }

    }

}
1 resposta
solução!

Não entendi. De uma forma muito misteriosa o problema foi resolvido. rsrs