如何使用JSTL保持从另一个JSP页面传递的数据?

时间:2018-08-09 02:59:41

标签: jsp jstl

我想创建一个类似于page的简单的基于Web的汽车预订应用程序。在该页面中,您可以选择您的位置,目的地以及预订日期。单击下一步后,页面会将您重定向到另一个页面,您可以在其中选择所需的时间,例如this。如果您单击任何时间按钮,它将在一个页面上显示一个对象(汽车),该对象在同一页面上显示已预订或可用的座位信息。

我有一个包含唯一ID,位置,目的地,日期,时间和座位的数据库。为了像上面的示例一样显示时间,我必须首先确定位置,目的地和日期(因为不同的目的地和日期将具有不同的时间)。为了获得有关剩余可用座位数的信息,我必须确定位置,目的地,日期和时间。

在我的应用程序中,我有3个.jsp页面,我们称它为First.jsp(用户输入的位置,目的地和日期在这里)Second.jsp(用户在first.jsp中填写的信息将在此处传递,然后再次传递给Third .jsp)Third.jsp(此处为用户输入时间,数据将传递至second.jsp。整个数据将在此进行处理。数据最终将传递回Third.jsp,向用户显示席位可用信息。 / p>

问题是,我可以将数据从first.jsp传递到third.jsp很好。但是在我从third.jsp检索数据并将其传递回second.jsp之后。来自first.jsp的数据已经消失了。这使我无法在那里处理所有数据。

我的总体代码如下:

First.jsp

<form action= second.jsp method= post>

<SELECT class: drop id: location name: locationlist>
   <option value = locationvalue/>
</SELECT>

<SELECT class: drop id: destination name: destinationlist>
   <option value = destinationvalue/>
</SELECT>

<SELECT class: drop id: date name: datelist>
   <option value = datevalue/>
</SELECT>

<input type= submit name=submitbtn/>
</form>

Second.jsp

<c:if test=(param.time is empty)>
   <c:redirect url: third.jsp>
       <c:param name= locationvalue value${param.locationlist>
   </c:redirect>
<c:if/>

<c:if test=(param is not empty>
   <s:query 
      SELECT id, seat FROM schedule WHERE location = 'locationlist' destination = 'destinationlist' date = 'datelist' time = 'timelist' // does not work here 
   </s:query>

Third.jsp

<s:query dataSource="${ds}" var="resultset">
        SELECT DISTINCT time FROM schedule WHERE location = '${param.locationvalue}'
</s:query>

<form action="second.jsp" method="post">
    <center>
        <c:forEach items="${resultset.rows}" var="row">
            <input type="submit" value="${row.time}" name="time">
        </c:forEach>
    </center>
</form>

1 个答案:

答案 0 :(得分:-1)

通常,<input type="hidden">将用于这种类型的应用程序(多步向导)。

因此,为简单起见,您可以像这样将输入从third.jsp“转发”到second.jsp

<form action="second.jsp">
    <input type="hidden" name="fieldname" value="value from first.jsp"/>
    <!--rest of the field in this form-->
</form>

当然,从second.jsp访问它就像:

${param.field}
${fn:escapeXml(param.field)} //escape xml in el way
<c:out value="${param.field}"></c:out> //escape xml by default

另一种方法是将每个字段存储到session对象中。只要session中的属性不是无效的,或者应用程序没有清除/覆盖它,就将保留。

<c:set scope="request" value="${param.field}" var="field"/>

根据您的上下文,可以用不同的方式完成会话管理。