2016-11-18 78 views
0

我是完全新的HTML和那些東西。Java/html輸入類型收音機 - 參數不匹配

我嘗試創建一個網頁(使用Java/Spring Boot),其中用戶查看「Pizza」,選擇數量和大小並提交訂單。

的HTML文檔的特定部分:

<div class="input-group"> 
    <span class="input-group-addon">Bestellmenge:</span> 
    <input type="number" name="amount" class="form-control" placeholder="1"/> 
</div> 
<form> 
    <input type="radio" name="pizzaSize" value="1"> Klein</input> 
    <input type="radio" name="pizzaSize" value="2"> Mittel</input> 
    <input type="radio" name="pizzaSize" value="3"> Gross</input> 
</form> 
<div> 
    <form th:action="@{/saveOrderAndReload(name=${pizza.name}, amount=${amount}, size=${pizzaSize})}" method="post"> 
     <div class="form-group"> 
      <div class="form-group"> 
       <input type="submit" class="btn btn-primary btn-success" value="zur Bestellung hinzufuegen"/> 
      </div> 
     </div> 
    </form> 
</div> 

因此,當用戶按下按鈕,下面的方法被調用:

@RequestMapping("saveOrderAndReload") 
    public String saveOrderAndReload(@RequestParam String name, @RequestParam int size, @RequestParam int amount, Model model) { 
    //Do whateher 
    return "another html page"; 
    } 

從我的理解,該方法需要字符串,INT ,int作爲參數。該網頁提供的字符串(比薩名),INT(從輸入字段),並從無線輸入INT(?是右)

然而,試圖執行時,該方法被調用是這樣的:

http://localhost:8080/saveOrderAndReload?name=SalamiPizza&amount=&size= 

失蹤的2個參數,讓我以下錯誤:

Failed to convert value of type [java.lang.String] to required type [int]; nested exception is java.lang.NumberFormatException: For input string: "" 
+0

它什麼都不會做。所有的表單元素都在表單之外......你的'th:action'只應該是'/ saveOrderAndReload',其他所有內容都應該來自你的表單。你不是在調用你提交數據到URL的方法...... –

回答

0

您對Thymeleaf的理解以及Web的工作原理是有缺陷的。

首先,您的所有元素需要在同一<form>之內才能提交(除非您使用JavaScript進行破解,但這是一個不同的野獸)。從HTML(也就是Thymeleaf)中,您將調用一種方法將數據提交給URL(最終在您的情況下將執行控制器)。

現在,隨着知識第一次修復你的表格。

<div> 
    <form th:action="@{/saveOrderAndReload(name=${pizza.name}, amount=${amount}, size=${pizzaSize})}" method="post"> 
     <div class="input-group"> 
      <span class="input-group-addon">Bestellmenge:</span> 
      <input type="number" name="amount" class="form-control" placeholder="1"/> 
     </div> 
     <div class="input-group> 
      <input type="radio" name="pizzaSize" value="1"> Klein</input> 
      <input type="radio" name="pizzaSize" value="2"> Mittel</input> 
      <input type="radio" name="pizzaSize" value="3"> Gross</input> 
     </div> 
     <div class="form-group"> 
      <div class="form-group"> 
       <input type="submit" class="btn btn-primary btn-success" value="zur Bestellung hinzufuegen"/> 
      </div> 
     </div> 
    </form> 
</div> 

下一頁您th:action不需要包含任何值(除非你想仍然可以通過名字)。所以將其更改爲th:action="@{/saveOrderAndReload(name=${pizza.name})所有其他屬性都將包含在表單中。

您已經命名自己的單選按鈕pizzaSize,而不是規模,無論是在你的控制器更改參數的名稱pizzaSize或更改單選按鈕的名稱size兩種方式均有效。

假設你改變你的單選按鈕名稱,你的表單應該看起來像這樣。

<div> 
    <form th:action="@{/saveOrderAndReload(name=${pizza.name})}" method="post"> 
     <div class="input-group"> 
      <span class="input-group-addon">Bestellmenge:</span> 
      <input type="number" name="amount" class="form-control" placeholder="1"/> 
     </div> 
     <div class="input-group> 
      <input type="radio" name="size" value="1"> Klein</input> 
      <input type="radio" name="size" value="2"> Mittel</input> 
      <input type="radio" name="size" value="3"> Gross</input> 
     </div> 
     <div class="form-group"> 
      <div class="form-group"> 
       <input type="submit" class="btn btn-primary btn-success" value="zur Bestellung hinzufuegen"/> 
      </div> 
     </div> 
    </form> 
</div> 
+0

有道理。我對代碼進行了所有更改,現在似乎可以工作。 – Master1114

0

在您的要求所有PARAMS是字符串。你應該手動使它們成爲整數。我不熟悉Java,但我認爲它應該像

public String saveOrderAndReload(@RequestParam String name, @RequestParam String sizeString, @RequestParam String amountString, Model model) { 
    int size = Integer.parseInt(sizeString); 
    int amount = Integer.parseInt(amountString); 

你還需要一些代碼部分來檢查,如果字符串是空的 - 你的INT值設定爲0。

+0

不,你不知道。如果轉換不會爲您完成,那將是一種糟糕的框架... –