2017-09-25 36 views
0

入力フィールド(タイプ: 'date')があります。誰がThymeleafを使用してオブジェクトの 'LocalDate'フィールドにマップできますか?HTMLの入力日付をJavaのLocalDateにマップするオブジェクト

オブジェクト

public class Project { 

    @Id 
    private int id; 

    private LocalDate startDate; 

    private LocalDate endDate; 
} 

HTML入力

<form action="#" 
 
     th:action="@{|/admin/projects/add/save|}" 
 
     th:object="${newProjects}" 
 
     method="POST" 
 
     class="form-horizontal"> 
 
     
 
    <input type="date" class="form-control" id="startDate" 
 
         placeholder="Project start" 
 
         th:field="*{startDate}"/> 
 

 
    <input type="date" class="form-control" id="endDate" 
 
         placeholder="Project start" 
 
         th:field="*{endDate}"/> 
 
         
 
</form>

どのように私はLOCALDATEたstartDateまたはendDateにに正しく入力フィールドをマッピングするだろうか?

コントローラ

//GetMapping for Projects is also there, but I didn't paste it to keep clarity 

@PostMapping("/add/save") 
public String saveProject(@Valid @ModelAttribute("project") Project project, 
          BindingResult bindingResult, 
          Model model, 
          RedirectAttributes redirectAttributes) { 

// bindingResult has error, because Thymeleaf can't map from the input-field to startDate 

    if (!bindingResult.hasErrors()) { 
     project.save(project); 
     return "redirect:/admin/projects/list"; 
    } else { 
     return "admin/projects/add"; 
    } 
} 

例外

プロパティ型の値プロパティに必要な型 'java.time.LocalDate' に 'はjava.lang.String型' を変換するのに失敗しました。 '開始日';ネストされた 例外は org.springframework.core.convert.ConversionFailedExceptionです:[java.lang.Stringで] [@ javax.persistence.Column java.time.LocalDate]値 のための「タイプするタイプから の変換に失敗しました2017- 09-08 ';あなただけの単純なタイプで定義することができますモデルオブジェクトをバインドすることができ 解析の試みが値に失敗しました[2017年9月8日]

答えて

2

あなたは、いくつかのオプションがあります。

1 - 試してみてください:

@DateTimeFormat(pattern = "yyyy-MM-dd") 
private LocalDate startDate; 

@DateTimeFormat(pattern = "yyyy-MM-dd") 
private LocalDate endDate; 

2 - Use Thymeleaf Extras

+0

最初のものが働いています。ありがとうございました! – ersu

+0

素晴らしい!誰かが解決策に直接向かうのを助けるための受け入れ可能な回答としてマークしたことを確認してください。 –

0

:ネストされた例外は、java.lang.IllegalArgumentExceptionがあります。オブジェクトがクライアント側からサーバーにシリアライズされたときに、単純型のintermsを表現しない限り、複合型(like java.time.LocalDate)についての知識はありません。あなたのScnerioにとって最良の方法は、サーバーサイドのJavaオブジェクトDates 'を文字列としてクライアント側のHTMLにマップすることです。その後、Stringオブジェクトをサーバ側コントローラクラスまたは任意のJavaサービスクラスのjava.time.LocalDateに変換できます。

関連する問題