JSP从一个选项值获取两个变量

fae0ux8s  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(177)

我有一个表格,可以从数据库中打印出食物的名称和价格

<select name="food" multiple="multiple" size="10" >
    <% for (int i = 0; i < name.size(); ++i) {
    %>
    <option 
        value="<%out.println(name.get(i));%>">
        <% out.println(name.get(i) + "-------- $" + price.get(i));%>
    </option> 
    <%
        }
    %>
</select>

当我把它放入数组时它给出了食物和价格

String[] list = request.getParameterValues("food");`foodarray = list;
 application.setAttribute("sessfood", foodarray);

我在用

String[] ceiArray =  (String[])application.getAttribute("sessfood");

从上一个jsp页面获取名称。所以,我可以将其检索到另一个网页,但它只返回名称而不是价格,无论如何我也可以检索价格吗?

rta7y2nd

rta7y2nd1#

首先,在JSP中不赞成使用 <% scriptlets %>,因此考虑切换到JSP EL。我已经使用了相同的代码来显示它的使用是多么简单。
要在另一个JSP中检索price,还必须传递它。当前,<select>显示nameprice,但只传递name

<c:set var="names" value="<%= name %>" />
<c:set var="prices" value="<%= price %>" />

<select name="food" multiple="multiple" size="10" >
  <c:forEach items="${names}" var="name" varStatus="loop">
    <option value="${name}=${prices[loop.index]}">
        ${name}-------- $${prices[loop.index]}
    </option> 
  </c:forEach>
</select>

在目标servlet中,您可以检索 name=price Map,并以JSP更方便从中检索值的方式存储它。

String[] selection = request.getParameterValues("food");

Map<String, String> foodPrices = new HashMap<String, String>(selection.length);
for (String option: selection) {
    String[] foodPrice = option.split("=");
    foodPrices.put(foodPrice[0], foodPrice[1]);
}

application.setAttribute("foodMap", foodPrices);

现在,在JSP中,您可以通过以下方式访问价格

<c:forEach items="${foodMap}" var="entry">
    <li>Price of ${entry.key} = $${entry.value}</li>
</c:forEach>

顺便说一下,我不确定是否应该将用户的食物选择存储到application作用域中,作为应用程序的所有用户共享,如果这不是您想要的,请使用session作用域。

zy1mlcev

zy1mlcev2#

把食物想象成一个领域对象,也就是说,它代表了你的问题领域的一部分。食物有属性、名称、价格等等--既然它有价格,也许把它叫做产品会更好。
名称或价格可能会随着时间的推移而更改,因此您应该为产品分配一个唯一代码,以便随着时间的推移对其进行标识。表单中的值应该使用此唯一代码。然后,您可以使用此代码查找产品域对象,以访问其他属性,如价格。
顺便说一句,由于该代码唯一地标识了域对象,因此还应该在equalshashCode方法中使用它,以确保表示同一域对象的两个示例能够正常工作。

相关问题