Добрый день!
Помогите разобраться с правильной кодировкой(локализацией?) ModelAttribute Controller'а
Есть контроллер:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
@Controller
@SessionAttributes("filters")
public class OutrunController {
private static final Logger logger = LoggerFactory.getLogger(OutrunController.class);
@Autowired
private OutrunDao outrunDao;
@RequestMapping(value={"/", "/list"}, method = RequestMethod.GET, produces = "application/x-www-form-urlencoded;charset=utf-8")
public String listGet(Model model, Locale locale) {
Date date = new Date();
DateFormat dateTimeFormat = DateFormat.getDateTimeInstance();
String now = dateTimeFormat.format(date);
logger.info("GET outruns: "+now);
model.addAttribute("serverTime", dateTimeFormat.format(date));
OutrunFilters filters;
if (!model.containsAttribute("filters"))
model.addAttribute("filters", filters = new OutrunFilters());
else
filters = (OutrunFilters)model.asMap().get("filters");
if (filters.getDate()==null || filters.getDate()=="")
filters.setDate(date);
if (filters.getCls()==null || filters.getCls()=="")
filters.setCls(OutrunFilters.CLASS_LOADING);
logger.info("Filter: "+filters.toString());
model.addAttribute("filters", filters);
model.addAttribute("classList", OutrunFilters.classList);
model.addAttribute("cityList", outrunDao.getCitys());
List<Outrun> outruns = outrunDao.findAll(filters);
model.addAttribute("outruns", outruns);
logger.info("No. of outruns: " + outruns.size());
return "list";
}
@RequestMapping(value={"/", "/list"}, method = RequestMethod.POST, produces = "application/x-www-form-urlencoded;charset=utf-8")
public String listPost(Model model, @ModelAttribute("filters") OutrunFilters filters,
Locale locale) {
logger.info("POST outruns with locale:"+locale);
logger.info("Filter: "+filters.toString());
return "redirect:/list";
}
}
Который работает с представлением list.jspx:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:spring="http://www.springframework.org/tags"
xmlns:form="http://www.springframework.org/tags/form"
version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<script type="text/javascript">
$(function(){
$('#date').datepicker({
dateFormat: 'dd.mm.yy',
changeYear: true
});
});
</script>
<div id="outrunFilters">
<form:form modelAttribute="filters" id="outrunFiltersForm" method="post">
<table border = "0">
<tr>
<td><b>
<form:label path="date">Дата:</form:label>
</b></td>
<td>
<form:input path="date" id="date"/>
</td>
</tr>
<tr>
<td><b>
<form:label path="cls">Вид:</form:label>
</b></td>
<td>
<form:select path = "cls">
<form:options items="${classList}" />
</form:select>
</td>
</tr>
<td><b>
<form:label path="city">Город:</form:label>
</b></td>
<td>
<form:select path = "city">
<form:options items="${cityList}" />
</form:select>
</td>
<tr>
</tr>
<td><b>
<form:label path="name">Название файла:</form:label>
</b></td>
<td>
<form:input path="name" id="name"/>
</td>
<tr>
</tr>
<tr>
<td colspan = "2"><input type = "submit" value = "Фильтр"/></td>
</tr>
</table>
</form:form>
</div>
<div id="outruns">
<table>
<thead>
<tr>
<th>Статус</th>
<th>Город</th>
<th>Название</th>
<th>Размер Mb</th>
<th>Формат</th>
<th>От.сторон</th>
<th>Развертка</th>
<th>EVSM</th>
</tr>
</thead>
<tbody>
<c:forEach items="${outruns}" var="outrun">
<tr>
<td>${outrun.statusName}</td>
<td>${outrun.city}</td>
<td>${outrun.name}</td>
<td>${outrun.sizeMb}</td>
<td>${outrun.format}</td>
<td>${outrun.aspect}</td>
<td>${outrun.scanType}</td>
<td>${outrun.evs}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
При вводе в поле "Название файла" русского имени, получаем "абдакадабру":
Лог:
INFO : ru.FoxGSM.IOutruns.controllers.OutrunController - POST outruns with locale:ru
INFO : ru.FoxGSM.IOutruns.controllers.OutrunController - Filter: date=03.03.2014 class=1 city=0 name=????????
Что делать??