2017-08-16 2 views
0

Ich bin ziemlich neu in Thymeleaf, also kämpfe ich damit.Thymeleaf: Eingabetext als Parameter in Formularaktion übergeben

Ich möchte einen Parameter an die Steuerung übergeben, wenn Sie ein Formular mit dem Wert eines Textfelds senden.

Dies ist mein Controller:

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

Dies ist, wie ich die Texteingabe definiert haben:

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

Und das ist, was habe ich versucht habe mit thymeleaf in meine HTML-Datei:

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

ich dieses Protokoll erhalten: *** MY ID: null

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

Ich erhalte dieses Protokoll: *** MY ID: $ {} myid

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

Dies wird nicht einmal an die Steuerung immer

Jede mögliche Hilfe würde geschätzt! :)

Antwort

4

Dies funktioniert nicht so. Wie alle Server-seitigen Technologien werden Thymeleaf-Vorlagen ausgeführt, bevor sie an den Benutzer gesendet werden, so dass sie nicht wissen können, was der Benutzer eingeben wird, und sie in das action-Attribut einfügen.

Sie könnten etwas ähnliches mit JavaScript machen, aber es wäre viel einfacher, ein normales HTML-Formular zu verwenden. Das erfordert, dass Sie kein Pfad-Variable zu verwenden, aber ein Anforderungsparameter in Ihrem Controller:

@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> 

(Vergessen Sie nicht, th:object mit einem Objekt zu verwenden, das eine Eigenschaft hat myid, wenn Sie möchte die *{...} Syntax verwenden.)

+0

Vielen Dank für Ihre Hilfe! Aber wie verknüpfe ich die HTML-Datei genau mit dem Modellobjekt? – gualizoe

+0

Ich bin mir nicht ganz sicher, was Sie fragen. Das Objekt muss Teil des Modells sein. Es gibt verschiedene Möglichkeiten, dies zu tun. – RoToRa

1

Was wirst du tun müssen, ist zweierlei:

Der erste Punkt ist, dass Sie th binden müssen: Feld Ihre Eingabe, wie:

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

Sie über Außerdem möchten Sie ändern, wie Ihr Formular nach Objekt speichert. Das sieht dann so aus:

Ersetzen Sie 'Objekt' mit dem Variablennamen des Modells, das Sie speichern. Danach sollte alles funktionieren.

Verwandte Themen