2011-02-28 27 views
0

我想知道是否有可能從HTML表單中的複選框獲取兩個值。如何使用HTML中的複選框獲取兩個值?

我的HTML代碼是這樣的:

<input type="checkbox" name="order" value="20" > Sundae $20 
<input type="checkbox" name="order" value="15" > Sandwich $10 
<input type="checkbox" name="order" value="25" > Reg. Burger $30 

設置的值是訂單的價格。所以,當我在Java servlet中編寫代碼時,我可以總計訂購量。 (我的代碼是這樣的)

String [] price = request.getParameterValues("order"); 
int sumTotal = 0; 
for (String sum : price){ 
    sumTotal=sumTotal+Integer.parseInt(sum); 
} 

out.println("<h1>Total Amount Purchased: $" + sumTotal + "</h1>"); 

我的問題如下:

我想我總在它之前顯示該命令的名稱和價格,但我不能因爲我只能使用此代碼獲得價格值:

String [] price = request.getParameterValues("order");` 

如何獲得價格以外的物品名稱? 我想打電話給兩個值在我的HTML這樣的:

<input type="checkbox" name="order" value="20" value="Sundae $20") Sundae $20 

所以,在我的Servlet的結果會是這樣:

Ordered by Customer 1: 
     Sundae $20 
     Sandwich $10 
     Total: $30 <------//I could only do this 

但我認爲這是不可能的,我不不知道如何在java中調用它。

另外,如何提高我的代碼獲取總金額?

回答

4

的「價值」應該是選項的名稱:這是選定的項目(不僅是他們的價格)

<input type="checkbox" name="order" value="sundae" > Sundae $20 
<input type="checkbox" name="order" value="sandwich" > Sandwich $10 
<input type="checkbox" name="order" value="burger" > Reg. Burger $30 

現在你知道了。

它打破了您的代碼來計算總價格。然而它已經被打破了。您不能依賴客戶提供的自豪感來決定服務器上的總價。用戶可以非常方便地向您發送一個值爲「1」的表單回覆並破壞所有內容。

服務器需要知道每個項目的價格並使用它。

String [] items = request.getParameterValues("order"); 
int sumTotal = 0; 
for (String item : items) { 
    sumTotal=sumTotal+prices.getPriceOf(item); 
} 

其中

prices.getPriceOf(item) 

提供訂購的商品的價格(其實代碼應該是比這更復雜的:如果該項目存在,因此它應該檢查)。

您可能想使用文本框而不是複選框,以便能夠訂購多個商品。

1

其中一個快捷的方法,我會解決這個問題是使用隱藏域

<input type="hidden" id="total"> 

這將是計算的提交按鈕的onclick。因此,total.value最終會看起來像聖代,$ 20;三明治,$ 10 ...

由於隱藏字段作爲表單提交的一部分發送,你應該能夠做到

request.getParameterValues("total") 

,然後解組在Java代碼中。

對於更優雅的解決方案,JSON應該有所幫助。

1

使用值value作爲產品代碼,例如sundae1 ==聖代,burger1 == Reg。漢堡,漢堡2 ==雙漢堡。當您從檢查箱收到的值,可以在比如使用代碼查找產品,按產品代碼鍵控Map<String, Product>在你的Java這樣的

class Product { 
    String code; 
    String name; 
    int price; // in pennies - 1000 is $10 
} 

的對象。

這樣做也可以避免您在我的網絡瀏覽器中篡改值時出現的問題,並以0.01美元爲單位購買菜單上的所有內容。