2015-03-18 61 views
1

林学习JSP,我想创建简单的网店JSP多个连续选择

  1. 客户将选择一个品牌

    • 方法connector.getBrands()将返回从availiable品牌排行榜一个数据库

    • 现在客户将在另一个选择中看到可用选项

    • 现在我需要保持选定的品牌在一个变量

  2. 顾客西港岛线选择模型

    • 方法connector.getModel($ {}品牌)将返回availiable模型

    • 名单
    • 现在客户可以选择一个模型

    • 现在我需要选择品牌和m奥德尔

  3. 客户会选择一种颜色

    • 方法connector.getColor($ {}品牌,$ {}模式将返回availiable颜色

      列表
    • 现在我需要保存所有三个值

  4. 客户将点击“继续”按钮继续到另一个JSP页面的订单确认现在

,问题是,每当我点击提交的“品牌”或“样板”,其他所选字段将重置(我试图从内部设置全局变量的“选择”元素,但没有任何运气)。

我该如何修改此代码,以便从该品牌中选择一个模型并显示其可用颜色后,显示适当的品牌? (加提交所有这些值到下一页)

而且这将是很好,如果知道,如何访问从“选择”或“输入”字段中的值,而无需重新加载页面

这里是我的对于MotorbikeForm.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<jsp:useBean id="connector" class="dealership.DatabaseConnector" scope="page"/> 
<c:out value="${connector.initializeDatabase()}" /> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 

<form method="post"> 
<label> 
Brand<br/> 
<select name="brand" size="1"> 
<c:forEach var="element" items="${connector.getBrands()}"> 
<option><c:out value="${element}" /></option> 
</c:forEach> 
</select> 
</label><br/> 
<input type="submit" value="Submit"/> 
<!-- This line below is useless right now --> 
<c:set var="brandVar" value="${brand}"/> 
</form> 

<form method="post"> 
<label> 
Model<br/> 
<select name="model" size="1"> 
<c:forEach var="element" items="${connector.getModels(param.brand)}"> 
<option><c:out value="${element}" /></option> 
</c:forEach> 
</select> 
</label><br/> 
<input type="submit" value="Submit"/><br/> 
</form> 

<form method="post"> 
<label> 
Color<br/> 
<select name="color" size="1"> 
<c:forEach var="element" items="${connector.getColors(param.brand, param.model)}"> 
<option><c:out value="${element}"/></option> 
</c:forEach> 
</select> 
</label><br/> 
<input type="submit" value="Submit"/><br/> 
</form><br/><br/> 

Next step<br/> 
<form method="post" action="OrderConfirmation.jsp"> 
<input type="submit" value="Continue"/> 
</form> 

</body> 
</html> 

1.

enter image description here

2.

代码10

enter image description here

3。

enter image description here

回答

1

首先,你不应该打的数据库,让您品牌每次页面重新加载模型。您应该取一次值并将它们保存在session中以供重用。

<c:if test="${empty brands}"> 
    <c:set var="brands" value="${connector.getBrands()}" scope="session" /> 
</c:if> 

其次,你需要确保的是,brand得到后续页面重新加载重新选择。

<select name="brand" size="1"> 
    <c:forEach var="brand" items="${brands}"> 
    <option <c:out value="${brand == param.brand ? 'selected' : ''}" />> 
     <c:out value="${brand}" /> 
    </option> 
    </c:forEach> 
</select> 

现在,做同样model但在<c:if>我们避免撞上数据库上的第一个页面加载(因为brand尚未选中),可选隐藏空白下拉成也它包装好。

<c:if test="${not empty param.brand}"> 
    <c:if test="${empty param.model}"> 
    <c:set var="models" value="${connector.getModels(param.brand)}" scope="session" /> 
    </c:if> 
    <form method="post"> 
    <label>Model<br/> 
    <select name="model" size="1"> 
     <c:forEach var="model" items="${models}"> 
     <option <c:out value="${model == param.model ? 'selected' : ''}" />> 
      <c:out value="${model}" /> 
     </option> 
     </c:forEach> 
    </select> 
    </label><br/> 
    <input type="hidden" name="brand" value="${param.brand}"/><br/> 
    <input type="submit" value="Submit"/><br/> 
    </form> 
</c:if> 

重复color也有点类似的逻辑。

<c:if test="${not empty param.model}"> 
    <c:if test="${empty param.color}"> 
    <c:set var="colors" value="${connector.getColors(param.brand, param.model)}" 
      scope="session" /> 
    </c:if> 
    <form method="post" action="OrderConfirmation.jsp"> 
    <label>Color<br/> 
    <select name="color" size="1"> 
     <c:forEach var="color" items="${colors}"> 
     <option><c:out value="${color}"/></option> 
     </c:forEach> 
    </select> 
    </label><br/> 
    <input type="hidden" name="brand" value="${param.brand}"/><br/> 
    <input type="hidden" name="model" value="${param.model}"/><br/> 
    <br/> 
    <br/> 
    Next step<br/> 
    <input type="submit" value="Continue"/> 
    </form> 
</c:if> 

注意,你在过去的<form>是不必要的。您的colors表单已经包含了下订单所需的所有信息(brand,modelcolor)。因此,我直接将其action设置为OrderConfirmation.jsp

+0

谢谢,它很好,它帮助了我很多 – Peter 2015-03-19 15:06:04

+0

@Peter很高兴帮助。你已经在那里做了一些努力..带注释的屏幕截图。只好回答:) – 2015-03-19 19:23:58