2014-04-01 4 views
4

Intellij에서 Spring 웹 응용 프로그램을 사용하여 여러 문자열로 기본 입력 양식을 만들었습니다. 양식은 문자열 만 사용할 때 백엔드에 성공적으로 저장되므로 모델에 날짜 필드를 추가하기로 결정하고 컨트롤러/jsp를 수정하여 입력 양식에서이를 수용하고 레코드 목록에 표시하려고했습니다. 값을 얻지 못하는 입력 양식에 문제가 있습니다.JSP 형식 날짜 입력 필드

법인 :

@Temporal(TemporalType.DATE) 
@DateTimeFormat(pattern="dd.MM.yyyy") 
private Date dueDate; 

public Date getDueDate() { 
    return dueDate; 
} 

public void setDueDate(Date dueDate) { 
    this.dueDate = dueDate; 
} 

JSP (I 기입 수 빈 필드로 시작하고 나는이 값이 여기에 비어 있어야합니다 가정?) :

<div class="control-group"> 
     <form:label cssClass="control-label" path="dueDate">Due Date:</form:label> 
     <div class="controls"> 
      <input type="text" path="dueDate" class= "date" name = "dueDate" value = "<fmt:formatDate value="" pattern="MM-dd-yyyy" />"/> 
     </div> 
    </div> 

컨트롤러 :

@RequestMapping(value = "/todos/add", method = RequestMethod.POST) 
public String addUser(@ModelAttribute("todo") Todo todo, BindingResult result) { 
    System.err.println("Title:"+todo.getTitle()); 
    System.err.println("Due Date:"+todo.getDueDate()); 
    todoRepository.save(todo); 
    return "redirect:/todos/"; 
} 

내 디버그 기한이 표시됩니다 : null 그래서 아무 것도 게시 할 때 양식에서 내 날짜 필드에 보내고 있습니다. 이는 날짜 필드가 절대로 저장되지 않고 저장소가 저장된다는 것을 의미합니다.

+0

기한이 'null'일 수있는 이유를 모르지만 입력 요소의 값 속성에 변경해야하는 따옴표가 있습니다. t o 작은 따옴표 또는 이스케이프 됨. – anirudh

답변

10

Spring에서 날짜 문자열을 java.util.Date 객체로 변환하고 명령 객체에 설정하도록하려면 InitBinder를 컨트롤러에 등록해야합니다. 포함 컨트롤러에 다음과 같은 : 나는 위의 솔루션의 조합을 사용했습니다

<input type="text" path="dueDate" class= "date" name = "dueDate" value = "<fmt:formatDate value="${cForm.dueDate}" pattern="MM-dd-yyyy" />"/> 
1

처럼 봄 입력을 사용하십시오 :

<div class="control-group"> 
    <form:label cssClass="control-label" path="dueDate">Due Date:</form:label> 
    <div class="controls"> 
     <form:input path="dueDate" class="date" /> 
    </div> 
</div> 

dueDate 입력에, 당신은 :이 사용되지

value="<fmt:formatDate value="" pattern="MM-dd-yyyy" />" 

, 전혀 가치를 제공하지 않았습니다.

0

그리고 (이 지속를 작동하는 것 같다 화면에 제대로 값을 반환

@InitBinder 
    public void initBinder(WebDataBinder binder) { 
     SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); 
     sdf.setLenient(true); 
     binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); 
    } 

은 당신의 JSP를 수정). 내 JSP는 :

<div class="control-group"> 
     <form:label cssClass="control-label" path="dueDate">Due Date:</form:label> 
     <div class="controls"> 
      <form:input path="dueDate" class="date" /> 
     </div> 
    </div> 

그리고 위에서 설명한 Initbinder를 추가했습니다.

삽입을위한 입력 양식 (업데이트하지 않음)으로 for (아직!)에 값을 포함하고 싶지 않습니다.

0

당신은 여기 InitBinder 필요가 없습니다 먼저 당신이 Rishav 바수을 좋아 JSP 수정했다 :

<input type="text" path="dueDate" class= "date" name = "dueDate" value = "<fmt:formatDate value="${cForm.dueDate}" pattern="MM-dd-yyyy" />"/>

당신이 당신의 입력에 값을 제공하지 않았기 때문이다.

다음과 같이 당신의 엔티티에 @DateTimeFormat을 변경

@DateTimeFormat(pattern = "MM-dd-yyyy") 

봄이 바인딩을 할 것입니다.

물론 다른 형식의보기에서 귀하의 날짜에 대해 동일한 형식을 사용하는 경우에만 작동합니다. 그렇지 않은 경우 InitBinder가 필요합니다.날짜가 오류없이 자동으로 바인딩됩니다 JSP에서 봄

import org.springframework.format.annotation.DateTimeFormat; 
import java.util.Date; 

@DateTimeFormat(pattern = "MM-dd-yyyy") 
private Date birthdate; 

에 의해 DateTimeFormat에 의해 제공되는 주석을 사용하여 모델 클래스에서

2

<form:input path="birthdate" cssClass="form-control" /> 

참고 : 날짜 형식은 DD-MM-해야 yy ie 27-10-2017 다른 형식을 사용하면 예외가 발생합니다.