Pessoal, estou desenvolvendo uma aplicação utilizando Spring MVC e estou com problema de encoding quando envio os dados do meu formulário para o meu Controller. Já coloquei o filtro nas configurações do Spring para UFT-8, já alterei as configurações do Eclipse e já verifiquei no meu jsp. Está tudo ok, porém não sei mais o que fazer. Alguém poderia me ajudar? Obrigada
Erro de Encoding ao enviar formulário para Controller
8 Respostas
Tem como você colocar o uma parte do código? para que tenhamos possibilidade de te ajudar?
Claro,
Esse é o filter
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
encodingFilter.setForceEncoding(true);
return new Filter[]{encodingFilter};
}
Minha JSP
<%@ 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" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1" />
<c:url value="/" var="contextPath" />
<link href="${contextPath}resources/css/bootstrap.min.css"
rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/style.css" rel="stylesheet"
type="text/css" media="all" />
<script type="text/javascript" src="${contextPath}resources/js/jquery-1.12.3.min.js"></script>
<script type="text/javascript" src="${contextPath}resources/js/jquery.maskedinput.min.js"></script>
<script type="text/javascript" src="${contextPath}resources/js/jquery.maskMoney.min.js"></script>
<script type="text/javascript" src="${contextPath}resources/js/bootstrap.min.js"></script>
<script type="text/javascript" src="${contextPath}resources/js/app.js"></script>
</head>
<body>
<div class="panel panel-default">
<div class="panel-heading">Cadastro de Compra</div>
<div class="panel-body">
<c:if test="${linkGerado != null}">
<div class="alert alert-info alert-link" role="alert">
Link gerado para envio ao cliente. <br/><span id="link-gerado">${linkGerado}</span> <br/><button id="cop-link" class="btn btn-info">Copiar link</button>
</div>
</c:if>
<c:if test="${msgRetornoPedido != null}">
<div class="alert alert-warning alert-link" role="alert">
${msgRetornoPedido}
</div>
</c:if>
<form:form class="form-horizontal" action="${s:mvcUrl('CCC#gravar').build()}" method="POST" commandName="pedido">
<div class="form-group">
<label for="nome" class="col-sm-2 control-label">Nome Completo</label>
<div class="col-sm-10">
<form:input path="nome" cssClass="form-control" id="nome" placeholder="Nome"/>
</div>
</div>
<div class="form-group">
<label for="cpf" class="col-sm-2 control-label">CPF</label>
<div class="col-sm-10">
<form:input path="cpf" cssClass="form-control" id="cpf" placeholder="CPF"/>
</div>
</div>
<div class="form-group">
<label for="pedido" class="col-sm-2 control-label">N° do Pedido</label>
<div class="col-sm-10">
<form:input path="numero" cssClass="form-control" id="numero" placeholder="Numero do Pedido"/>
</div>
</div>
<div class="form-group">
<label for="valor" class="col-sm-2 control-label">Valor</label>
<div class="col-sm-10">
<form:input path="valor" cssClass="form-control" id="valor" placeholder="Valor"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">Enviar</button>
</div>
</div>
</form:form>
</div>
</div>
</body>
</html>
Meu Controller
@RequestMapping("/editar")
public ModelAndView editar(Parametro parametro){
parametroDAO.editar(parametro);
return this.parametro(parametro);
}
Como está configurado o seu banco de dados? Qual a Collation dele?
Está em UTF8 ; o estranho é que se eu passo os dados direto pela URL, ele vem com o encoding correto, porém se eu passo pelo meu form, ele vem errado
Vamos tentar algumas dessas soluções:
Solução 1
No web.xml adicione:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Solução 2
Use request.setCharacterEncoding("UTF-8"); no seu código:
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Character encoding test page</title>
</head>
<body>
<p>Data posted to this form was:
<%
request.setCharacterEncoding("UTF-8");
out.print(request.getParameter("mydata"));
%>
</p>
<form method="POST" action="index.jsp">
<input type="text" name="mydata">
<input type="submit" value="Submit" />
<input type="reset" value="Reset" />
</form>
</body>
</html>
Solução 3
No arquivo pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...
</properties>
Solução 4
Tem isso:
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
troque por isso:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Referente ao link: UTF-8 encoding in Spring MVC, problem with FORMs
Link explicativos:
Fiz todos esses passos, não funcionou =/ . Mais alguma dica? rs
bem complicado seu problema. Não sou do mundo Java mas se souber de algo mais posto aqui
Depois de muito sofrer resolvi o mesmo problema da seguinte maneira:
Formulario é necessário incluir o acceptCharset
<form:form action="${pageContext.servletContext.contextPath}/cadastro-estabeleciemento-inclusao" method="POST" commandName="estabelecimento" enctype="multipart/form-data" acceptCharset="utf-8">
Já no AbstractSecurityWebApplicationInitializer inclui o seguinte código:
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
super.beforeSpringSecurityFilterChain(servletContext);
FilterRegistration.Dynamic characterEncodingFilter;
characterEncodingFilter = servletContext.addFilter("encodingFilter",
new CharacterEncodingFilter());
characterEncodingFilter.setInitParameter("encoding", "UTF-8");
characterEncodingFilter.setInitParameter("forceEncoding", "true");
characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
}
E também o tão falado filtro na AbstractAnnotationConfigDispatcherServletInitializer.
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setForceEncoding(true);
encodingFilter.setEncoding("UTF-8");
return new Filter[]{encodingFilter};
}