2011-02-28 29 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美元为单位购买菜单上的所有内容。