3

という名前の次の jsp ファイルがあります。このファイルBookstore.jspでは、データベースからのデータでテーブルを埋めました。

<%
ArrayList<Book> b = new ArrayList<Book>();
b = SqlSentencesList.showCatalog(); // this method returns an arrayList with all books
%>

<form method="get" action="ShoppingCarController">
    <table border="2">
        <tr>
            <th>ISBN</th>
            <th>Title</th>
            <th>Author</th>
            <th>Price</th>
            <th>Select</th>
        </tr>

        <%for(int i=0; i<l.size();i++){%>
            <tr>
                <td> <%out.print(b.get(i).getIsbn());%> </td>
                <td> <%out.print(b.get(i).getTitle());%> </td>
                <td> <%out.print(b.get(i).getAuthor());%> </td>
                <td> <%out.print(b.get(i).getPrice());%> </td>
                <th> <input type="checkbox" name="checkboxGroup" value="<%Integer.toString(i);%>"/> </th>
            </tr>
        <% } %>
    </table>
    <input type="submit" value="Add to shopping car"/>
</form>

ここで、サーブレットに同じ本のデータ (ISBN、タイトル、著者、価格) が必要ですが、選択したものだけが必要です。

これは、ShoppingCarController サーブレットの doGet メソッドです。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ArrayList<Book> shoppingCar = new ArrayList<Book>();

        String[] values = request.getParameterValues("checkboxGroup");

        for(int i=0; i<values.length; i++) {
            System.out.println(values[i]);
        }
    }

何が得られるかを確認するために印刷しようとしましたが、コンソールには何も表示されません。

私はこの同様のケースを見ていました:チェックボックスを使用して選択した行からデータを JSP からサーバーに渡す方法と、私の問題はvalue属性にあると思いますが、その質問で使用されている構文がわかりません。for eachそして<c:outタグ; 要するに、コードを機能させるためにコードを適応させる方法がわかりません。

誰か私に手を貸してください。

4

3 に答える 3

3

jsp は次のようになります (投稿したサーブレット コードを使用)

最初にサーブレットを編集して、以下を含めます。

ArrayList<Book> shoppingCar = new ArrayList<Book>();
request.setAttribute("b", shoppingCar);//accsessed as ${b} in jsp

あなたのjspには次のものがあります:-

     <form action="yourserlet" method="POST">
                <table>
                    <thead>
                        <tr>
                            <td width="10%">ISBN</td>
                            <td width="30%">TITLE</td>
                            <td width="30%">AUTHOR</td>
                            <td width="20%">SELECT</td>
                        </tr>
                    </thead>

                    <tbody>

        <c:forEach items="${b}" var="book">  
                 <tr>     
                   <td align="left"><input type="text" name="isbn<c:out value="${book.isbn}"/>"  disabled="true"/></td>                     
                     <td align="left"><input type="text" name="title<c:out value="${book.title}"/>"  disabled="true"/></td> 
                     <td align="left"><input type="text" name="author<c:out value="${book.author}"/>"  disabled="true"/></td> 
                     <td align="left"><input type="text" name="price<c:out value="${book.price}"/>"  disabled="true"/></td>
                     <td align="center">  
                        <input type="checkbox" name="checkboxgroup"   
                            value="c:out value="${book.tostring()}"/>"/>  
                     </td>  
                  </tr>  
             </c:forEach>   
      </tbody>
                </table>
            </form>

チェックボックスをオンにしてフィールドを有効または無効にするには、jqueryを使用する必要があります。デフォルトでは無効にしています。

も確認してください:

jQuery - チェックボックスの有効化/無効化

ajaxとjsp/servletsを使用して、選択したすべてのチェックボックスの値を取得しますか?

于 2012-04-13T18:19:33.227 に答える
2

JSP 変更で

 <input type="checkbox" name="checkboxGroup" value="<%=Integer.toString(i)%>"/> 

また

 <input type="checkbox" name="checkboxGroup" value="<%=i%>"/> 

も機能します。文字列値にキャストする必要はありません。

参考までに:もっと何かをする予定がある場合。b.get(i).getID()パラメータで何かを渡すほうがよい でしょう。シーケンスを渡すと、データが正しくない場合があります。

于 2012-04-13T10:09:42.767 に答える