从一个JSP中的表中获取所选行的值到另一个JSP

时间:2017-05-24 15:49:30

标签: jsp servlets

我正在尝试从具有多行的表中选择一行,并在另一个JSP中显示所选行的值。

但无论我选择哪一行,我都只得到第一行的值。从第一个JSP中选择的表数据将填充.js文件。

以下是我的第一个JSP代码片段:

<div>
 <form class="form-inline" name = "select_req" action="/Main.do" method = post>
     <table class="table" id = "searchresult">
         <tr>
             <th>From</th>
             <th>To</th>
             <th>Airline</th>
             <th>Fare</th>
             <th>Action</th>
         </tr>
         <tr ng-repeat="flight in flights | filter:query">
             <td><input value = "{{flight.from}}" name = "from"></td>
             <td><input value = "{{flight.to}}" name = "to"></td>
             <td><input value = "{{flight.airline}}" name = "airline"></td>
             <td><input value = "{{flight.fare}}" name = "fare"></td>
             <td><input type="submit" value="Select" name = "select_req" class="btn btn-success"/></td>
         </tr>
     </table>
     <input type="hidden"/>
 </form>
</div>

这是将其发送到另一个JSP的servlet代码:

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     String from = request.getParameter("from");        
     String to = request.getParameter("to");        
     String airline = request.getParameter("airline");      
     String fare = request.getParameter("fare");
     HttpSession session = request.getSession(); 
     session.setAttribute("from", from);
     session.setAttribute("to", to);
     session.setAttribute("airline", airline);
     session.setAttribute("fare", fare);

     request.getRequestDispatcher("/WEB-INF/views/Payment.jsp").forward(request, response);
} 

最后,JSP是表中需要显示的选定行:

<table class = "table">
             <tr>
                 <th>From</th>
                 <th>To</th>
                <th>Airline</th>

                <th>Fare</th>
            </tr>
            <tr>
                <td><%= session.getAttribute("from") %></td>
                <td><%= session.getAttribute("to") %></td>
                <td><%= session.getAttribute("airline") %></td>
                <td>$<%= session.getAttribute("fare")  %></td>
            </tr>
        </table>

enter image description here

1 个答案:

答案 0 :(得分:0)

表单元素包含所有表行的所有输入元素。提交表单时,它会将所有这些输入元素的值发送到服务器。

现在在服务器上所有参数都是多值的。如果你调用ServletRequest.getParameter(String),它将返回第一个值 - 它对应于第一个表行中的输入。

通过调用request.getParameterValues("from")来检查它 - 它应该返回一个数组,其长度等于表中的行数,包含第一个表列的所有输入。

您可能想要的只是发送包含按下按钮的行的值。可以使用Javascript执行此操作,也可以将每个<tr>包装在自己的<form>元素中。