2017-08-16 42 views
0

私はThymeleafの新機能ですから、これで苦労しています。Thymeleaf:フォームアクションでパラメーターとして入力テキストを渡す

テキストフィールドの値を使用して、フォームを送信するときにパラメータをコントローラに渡したいとします。

これは私のコントローラである:

@PostMapping("/postEndpoint/{myid}") 
public String pidUserSubmit(@PathVariable(value = "myid") String myid) { 
    log.debug("*** MY ID: {}", myid); 
    return "redirect:/someOtherPage"; 
} 

これは私がテキスト入力定義されてきた方法です:

<input id="myid" name="myid" type="text" maxlength="26" title="Please enter a valid ID" class="texter" th:value="*{myid}"> 

をそして、これは私がthymeleafと私のhtmlファイルで試してみたものです。

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/__${myid}__}" method="post"> 

このログは次のとおりです。 *** MY ID:null

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/${myid}}" method="post"> 

私はこのログを取得しています: *** MY ID:$ {} MYID

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/{myid}(myid=${myid})}" method="post"> 

これも、任意の助けをいただければ幸いコントローラ

になっていません! :)あなたがする必要があるとしている何

答えて

4

これはこのようには機能しません。すべてのサーバーサイドテクノロジーと同様に、Thymeleafテンプレートはユーザーに送信される前に実行されるため、ユーザーが入力する内容を把握してaction属性に挿入することはできません。

JavaScriptと同様のことができますが、通常のHTMLフォームを使用する方がはるかに簡単です。それはあなたがパス変数を使用しない必要がありますが、あなたのコントローラでリクエストパラメータは:

@PostMapping("/postEndpoint") 
public String pidUserSubmit(@RequestParam(name = "myid") String myid) { 
    log.debug("*** MY ID: {}", myid); 
    return "redirect:/someOtherPage"; 
} 

<form th:action="@{/postEndpoint}" th:object="${mymodelobject}"> 
    <input name="myid" type="text" th:value="*{myid}"> 
</form> 

(あなたがいる場合、プロパティmyidを持つオブジェクトでth:objectを使用することを忘れないでください。 *{...}の構文を使用します)。

+0

ありがとうございます!しかし、htmlファイルをモデルオブジェクトに正確に "リンク"するにはどうすればいいですか? – gualizoe

+0

私はあなたが何を求めているのかよく分かりません。オブジェクトはモデルの一部でなければなりません。それを行うにはさまざまな方法があります。 – RoToRa

1

は2つのことです:

最初の項目は、あなたが番目のバインドする必要がある:として、あなたの入力にフィールド:

<input id="myid" name="myid" type="text" maxlength="26" title="Please enter a valid ID" class="texter" th:field="*{myid}" th:value="*{myid}"> 

あなた'LLまた、フォームがオブジェクトごとに保存する方法を変更する必要があります。これは次のようになります:

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/(object)}" th:object="${object}" method="post"> 

保存するモデルの変数名に 'object'を置き換えます。これはすべてこれに続いて動作するはずです。

関連する問題