2016-05-18 16 views
2

フォームを送信した後、nullに渡された日付を除いて、すべての値がコントローラに正しく渡されます。入力フィールドの日付)追加しようとしましたが、うまくいきませんでした。私も "パス"を削除して "名前"で置き換えようとしましたが、 "パス"属性が見つからないというエラーがスローされます。私は、次ませんが、何のluck-
1. In spring web mvc application date value is received as NULL in controller after reading from date-picker on jsp page
2. http://blog.teamextension.com/date-binding-in-spring-mvc-1321Spring MVCを使用したjQuery datepicker - ビューからコントローラへの日付の受け渡しnull

jQueryをしようとした: $(document).ready(function() { $("#datepicker").datepicker({dateFormat:"yy-mm-dd"}); });

JSP:

<div class="plLabelSearch" id="hiddenField">Due Date:</div> 
<div class="plinput"><form:input type="text" id="datepicker" path="dueDate" placeholder="yyyy-mm-dd"/></div> 

モデル:

@Column(name = "DUE_DATE") 
@DateTimeFormat(pattern = "yyyy/mm/dd") 
private Date dueDate; 

コントローラ:

@RequestMapping(value="/lock", method = RequestMethod.POST) 
public @ResponseBody Status lockDevice(@ModelAttribute("adminTransaction") @Validated AdminTransaction adminTransaction, BindingResult result, Model model, Locale locale,Map<String, Object> map, HttpServletRequest request) { 
    try { 
     /*.......CODE.........*/ 
     adminTransactionDO.setDueDate(adminTransaction.getDueDate()); 
     /*.......CODE.........*/ 
     } 
     return new Status("success", "Transaction inserted Successfully !"); 
      } catch (Exception e) { 
      return new Status("error", e.toString()); 
      } 
} 

答えて

1

それはあなたのようになります。

@Column(name = "DUE_DATE") 
@DateTimeFormat(pattern = "yyyy/mm/dd") 
private Date dueDate; 

が問題です。 SpringはそれをDateに変換できません。一時は(

public @ResponseBody Status lockDevice(@ModelAttribute("adminTransaction") @Validated AdminTransaction adminTransaction, BindingResult result, Model model, Locale locale,Map<String, Object> map, HttpServletRequest request, @RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date dueDate) { 
    try { 
     /*.......CODE.........*/ 
     SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 
     Date date = dt1.parse(dt1.format(dueDate)); 
     adminTransactionDO.setDueDate(date); 
     /*.......CODE.........*/ 
     } 
     return new Status("success", "Transaction inserted Successfully !"); 
      } catch (Exception e) { 
      return new Status("error", e.toString()); 
      } 
} 
+0

はい問題はバインディングで、私は他の制限のためにデータ型をStringに変更できません。 –

0

あなたは...あなたは日付が次のように行うサーブレットに送信されたい場合は、あなたのJavaScriptでこの

<div class="plLabelSearch" id="hiddenField">Due Date:</div> 
<div class="plinput"><form:input type="date" id="datepicker"/></div> 

var date = document.getElementbyId("datepicker").value; 

を使用しようとすることができ

<form name="dateform" action="ServletName" method="post"> 
<input type="date" name="InputDate" id="datepicker"/> 
<input type="submit" value="Submit"></form> 

サーブレットのポストのメソッドで....

String date = request.getParameter("InputDate"); 
+0

私はjQueryと春のMVCを使用しています。 –

1

してみてください永続性に関与しないフィールドとその値は決してデータベースに格納されません)。次に、このフィールドをビュー内のフォームの入力フィールドのパス属性にマップします。コントローラ内のSimpleDateFormatユーティリティを使用すると、日付文字列の値を実際の日付形式に変換してデータベースに格納できます。

MODAL

@Column(name = "DUE_DATE") 
@DateTimeFormat(pattern = "yyyy/mm/dd") 
private Date dueDate; 

@Transient 
private String dueDateString; 

//Your getters, setters and the rest 

JSP

<div class="plinput"><form:input type="text" id="datepicker" 
path="dueDateString" placeholder="yyyy/mm/dd"/></div> 

CONTROLLER

@RequestMapping(value="/lock", method = RequestMethod.POST) 
public @ResponseBody Status lockDevice(@ModelAttribute("adminTransaction") @Validated AdminTransaction adminTransaction, BindingResult result, Model model, Locale locale,Map<String, Object> map, HttpServletRequest request) { 



SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 


     try { 
       Date dueDateVal; 
     dueDateVal = dateFormat.parse(adminTransaction.getDueDateString()); 
     adminTransaction.setDueDate(dueDateVal); 

     } catch (ParseException e) { 


       e.printStackTrace(); 
     } 



try { 
     /*.......CODE.........*/ 
     adminTransactionDO.setDueDate(adminTransaction.getDueDate()); 
     /*.......CODE.........*/ 
     } 
     return new Status("success", "Transaction inserted Successfully !"); 
      } catch (Exception e) { 
      return new Status("error", e.toString()); 
      } 

} 
0

あなたは文字列の形式で日付を保持するための一時エンティティのフィールドを定義することができます。

代わりに、コントローラにRequestParamに日付を渡すことで、私は問題を解決し

private String dueDate; 
関連する問題