2016-08-01 13 views
1

Ich habe ein input Feld, dessen Wert durch response.query durch die Steuerung eingestellt, in der Vorlage Ich habe auch zwei Links, die read und delete Anrufe an die id im query eingegeben zuführen. Hier ist die Vorlage.Thymeleaf: pass Eingabetext als Parameter in href

<div class="input-group"> 
     <input type="text" th:value="*{response.query}" /> 
     <div class="input-group-btn"> 
      <ul class="dropdown-menu dropdown-menu-right"> 
       <li><a href="#" th:href="@{/read/{id}(id=response.query)}">Read</a></li> 
       <li><a href="#" th:href="@{/delete/{id}(id=response.query)">Delete</a></li> 
      </ul> 
     </div> 
</div> 

Leider ist die href Parameter immer wird als null geben. Gibt es einen alternativen Ansatz dazu?

+0

das war sehr hilfreich – Hinotori

Antwort

0

Sie können nicht response.query bekommen, weil es auf der Client-Seite ist, dann rufen Sie es an. In Ihrem Fall müssen Sie die JavaScript aktivieren, die Ihren Link URL konstruieren wird (othervise Sie ein Formular benötigen Wert der Eingabe einreichen):

<div class="input-group"> 
    <input type="text" id="myval" th:value="*{response.query}" /> 
    <div class="input-group-btn"> 
     <ul class="dropdown-menu dropdown-menu-right"> 
      <li><a href="#" onclick="onReadClick();" href="#">Read</a></li> 
      <li><a href="#" th:href="@{/delete/{id}(id=response.query)">Delete</a></li> 
     </ul> 
    </div> 
</div> 

<script th:inline="javascript"> 
/*<![CDATA[*/ 
function onReadClick() { 
    var id = $('#myval').value; 
    /*[+ 
    var myUrl = [[@{/read}]] + id; 
    +]*/ 
    window.location.href = myUrl; 
}); 
/*]]>*/ 
</script> 
1

Nun lassen Sie mich sehen, ob ich verstehe, was Sie wollen:

Zum Beispiel setzen Sie '5' in die Texteingabe. Jetzt wollen Sie href:

http://localhost:8080/read/5

Und Sie haben eine Steuerung, die etwa wie folgt aussieht:

@RequestMapping(value="/read/{id}", method=RequestMethod.GET) 
public String read(@PathVariable String id, Model model) { 
    // your logic goes here 
    return "read"; 
} 

Erstens mein Vorschlag ist, dass Sie nur Ihren Code ändern aus:

<li><a href="#" th:href="@{/read/{id}(id=response.query)}">Read</a></li> 

zu:

<li><a href="#" th:href="@{/read/{id}(id=${response.query})}">Read</a></li> 
+0

Ja, das ist richtig Ich habe einen Controller, der dem ähnlich aussieht, alles was ich will ist ein Eingabetextfeld an ein Feld gebunden und zwei href eins zu lesen und eins mit dem Feldwert als Parameter zu löschen in beiden Fällen. – v1kas

+1

Also hat es geklappt: Ersetzen Sie das folgende 'th: href =" @ {/ read/{id} (id = response.query)} 'mit dem' th: href = "@ {/ read/{id} (id = $ {response.query})} " –

+0

das ist die Antwort! – Hinotori