<tr class="rowsAdded">
<td><input name="item" class="form-control" type="text" placeholder="Item" /></td>
<td><input name="amount" class="form-control" type="number" placeholder="Amount" /></td>
<td><input name="expenseDate" class="form-control" type="date"placeholder="ExpenseDate" /></td>
</tr>
Ниже мой контроллер и Init Binder
@RequestMapping (value = "/saveExpenses", method=RequestMethod.POST)
public String saveExpenses (@RequestBody ExpenseDetailsListVO expenseDetailsListVO, Model model,BindingResult result) {
if (result.hasErrors()) {
System.out.println(result.getFieldError().getField().toString()+" error");
}
System.out.println(expenseDetailsListVO);
return "success";
}
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
Таким образом, формат даты, который я хочу, не работает, это результат того, что я получаю. AccountDate = Wed Mar 18 05:30:00 IST 2015 Но я хочу, чтобы он был в определенном формате, таком как yyyy-MM-dd... предложите мне способ сделать это.
Разве это не будет проще?
Entity или Form-Backing-Object:
class Foo {
/* handles data-binding (parsing) and display if spring form tld or spring:eval */
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private Date expenseDate;
...
}
В форме:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<form:form modelAttribute="modelAttributeName">
<form:input type="date" path="expenseDate" />
</form:form>
Или просто для отображения:
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<spring:eval expression="modelAttributeName.expenseDate" />
Некоторые педантичные заметки:
См. Мой пост здесь для лучших практик: Spring MVC: проверка, пост-перенаправление-получение, частичные обновления, оптимистический параллелизм, безопасность на местах
Я не знаю, помогает ли этот ответ вам или нет? Один из моих сущностных классов, как показано ниже...
@Entity
@Table(name = "TAIMS_INC_INCIDENT")
public class Incident implements Serializable{
@DateTimeFormat(pattern = "dd/MM/yyyy") // This is for bind Date with @ModelAttribute
@Temporal(TemporalType.DATE)
@Column(name = "inc_date")
private Date incidentDate;
}
И Input Like this..
<input type="text" id="incident-date" name="incidentDate" value="23/08/2017" />
Метод весеннего контроллера здесь..
@RequestMapping(value = "/saveIncident.ibbl", method = RequestMethod.POST)
public ModelAndView saveIncident(
@ModelAttribute("incident")
Incident incident,
BindingResult result){
System.out.println(incident.getIncidentDate());
// Wed Aug 23 00:00:00 BDT 2017
}
Это работает нормально. Incident incident
Содержит инцидент Дата = ср. 23 авг. 00:00:00 БДТ 2017
Если вы не хотите использовать @DateTimeFormat(pattern = "dd/MM/yyyy")
в классе Entity, тогда поставьте метод ниже в классе контроллера...
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
Я говорю, что ваше связующее, вероятно, прекрасно работает. Что он делает, так это взять строку в формате yyyy-MM-dd из вашего тела запроса HTTP и преобразовать его в объект Date. Но это все. То, что вы делаете с этим объектом Date после этого, зависит от вас. Если вы хотите передать его в виде строки в какую-либо другую часть вашей программы, вы должны ее преобразовать, возможно, используя SimpleDateFormatter.