java初心者なのと、初めての利用のため至らないところもありますがよろしくおねがいいたします。
タイトルにも記載しましたが、DBに接続してその値をservletで受け取り、jspで画面出力を行いたいと考えております。
ShopTop.javaからindex.jspで画面出力しようとした際に下記のエラーが発生してしまいました。
プルダウンに入れて、foreachで回そうとしたのですがそもそもjsp側で値を受け取れてなくそこでつまづいております。
jsp側の
// リクエストパラメータの取得 List<ShopItemDto> stif = (List<ShopItemDto>) request.getAttribute("shopTopItemForm"); List<ShopItemDto> stf = (List<ShopItemDto>) request.getAttribute("shopTopForm"); %>
部分を消すとShopTopで値が入っているのを確認いたしましたのでキャストの方法に問題があると思うのですが、見当違いでしょうか?
ご教示のほどよろしくおねがいたします。
構造は
WebContent
ーjsp
ーーtop
ーーーindex.jsp
となっております
###エラーメッセージ
org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/top/index.jsp at line 11 8: <% 9: String params = "全/角?文字"; 10: String a = URLEncoder.encode( params , "UTF-8"); 11: List<ShopItemDto> stif =(List<ShopItemDto>) request.getAttribute("shopTopItemForm"); 12: List<ShopItemDto> stf =(List<ShopItemDto>) request.getAttribute("shopTopForm"); Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) shop.ShopTop.doGet(ShopTop.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 原因 java.lang.ClassCastException: shop.ShopTopForm cannot be cast to java.util.List org.apache.jsp.jsp.top.index_jsp._jspService(index_jsp.java:148) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) shop.ShopTop.doGet(ShopTop.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
###ShopTop.java
package shop; import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import shop.dto.ShopItemDto; /** * TOPページ用サーブレット */ @WebServlet(name = "ShopTop", urlPatterns = { "/ShopTop" }) public class ShopTop extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShopTop() { super(); } /** * TOPページ表示内容を取得し、JSPへ返却。<br> * 初期表示は、全商品を取得する。 * * @param request * リスエストパラメータ * @param response * レスポンス * @throws ServletException * @throws IOException */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 返却用Formの生成 ShopTopForm shopTopForm = new ShopTopForm(); ShopTopForm shopTopItemForm = new ShopTopForm(); ShopService shopService = new ShopService(); try { // 商品の取得 List<ShopItemDto> shopItemList = shopService.getTopItem(); List<ShopItemDto> shopItemGroupList = shopService.getTopItemGroup(); // 取得データをTOPページフォームに設定 shopTopForm.setShopItemList(shopItemList); shopTopItemForm.setShopItemGroupList(shopItemGroupList); } catch (SQLException e) { // データ取得エラー // TODO:最終的にエラーページへ遷移させるような作りにします。 e.printStackTrace(); throw new ServletException(e); } // 商品用Formを設定 request.setAttribute("shopTopForm", shopTopForm); request.setAttribute("shopTopItemForm", shopTopItemForm); // 遷移先URLの設定 request.getRequestDispatcher("jsp/top/index.jsp").forward(request, response); response.sendRedirect("jsp/top/index.jsp"); // リクエストパラメータの文字コードを指定 request.setCharacterEncoding("UTF-8"); } /** * ポストで渡された場合もゲットと同じ動作。 * * @param request * リスエストパラメータ * @param response * レスポンス */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } @SuppressWarnings("unchecked") public static <T> T automaticCast(Object src) { T castedObject = (T) src; return castedObject; } }
###index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import ="java.net.URLEncoder" %> <%@page import="shop.dto.ShopItemDto" %> <%@ page import="java.util.List"%> <%@ page import="java.util.*"%> <% String params = "全/角?文字"; String a = URLEncoder.encode( params , "UTF-8"); // リクエストパラメータの取得 List<ShopItemDto> stif = (List<ShopItemDto>) request.getAttribute("shopTopItemForm"); List<ShopItemDto> stf = (List<ShopItemDto>) request.getAttribute("shopTopForm"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> <meta name="keywords" content="キーワード" /> <meta name="description" content="紹介文" /> <title>ホームページ・タイトル</title> <link rel="stylesheet" href="../../css/style.css" /> </head> <body> <!-- メイン --> <div id="main"> <!-- メインコンテンツ --> <div id="container"> <div id="contents"> <p><img src="../../img/line.gif" alt="" border="0" /></p> <h2>商品検索</h2> <form action="/test_ec/ShopTop" method="post"> <table> <tr> <td style="padding: 5px 10px;"> 商品グループ: </td> <td> <select name="itemGroup" style="width:130px;height:25px;"> <option value="0"></option> <c:forEach var="itemGroup" items="${shopTopItemForm.shopItemGroupList}"> <option value="${itemGroup.groupCode}"> <c:out value="${itemGroup.groupName}" /> </option> </c:forEach> </select> </td> <td style="padding: 5px 10px;"> 価格: </td> <td> <select name="priceMin" style="width:130px;height:25px;"> <option value="0">下限なし</option> <option value="1000">1000円</option> <option value="2000">2000円</option> <option value="3000">3000円</option> <option value="4000">4000円</option> <option value="5000">5000円</option> <option value="10000">10000円</option> </select> ~ <select name="priceMax" style="width:130px;height:25px;"> <option value="0">上限なし</option> <option value="1000">1000円</option> <option value="2000">2000円</option> <option value="3000">3000円</option> <option value="4000">4000円</option> <option value="5000">5000円</option> <option value="10000">10000円</option> </select> </td> </tr> <tr> <td style="padding: 5px 10px;"> ソート: </td> <td > <select name="sort" style="width:130px;height:25px;"> <option value="0"></option> <option value="asc">価格が低い順</option> <option value="desc">価格が高い順</option> </select> </td> </tr> <tr> <td colspan="2"> <button type="submit" class="button button-khaki"> <span>検索</span> </button> </td> </tr> </table> </form> <p><img src="../../img/line.gif" alt="" border="0" /></p> <h2>商品の一覧</h2> <c:forEach var="item" items="${shopTopForm.shopItemList}" varStatus="status"> <p class="left_box"> <img src='<c:out value="${item.image}"/>' alt="" border="0" style="widht:50px;height:50px;"/> <a href=" <c:url value="/ShopDetail"> <c:param name="itemCode" value="${item.itemCode}"/> </c:url> "> <br/> <b><c:out value="${item.itemName}"/>:</b> <b><c:out value="${item.price}円"/></b> <br /> </a> <br clear="left"> </p> </c:forEach> <br clear="all"> <p><img src="../../img/line.gif" alt="" border="0" /></p> <br /> <p class="back"><a href="#header">▲ページトップに戻る</a></p> <br /> </div> </div> <!-- メインコンテンツ終わり --> </div> <!-- メイン終わり --> </body> </html>
###補足情報
mac、tomcat8.5
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/22 16:10
退会済みユーザー
2017/03/22 17:03 編集
退会済みユーザー
2017/03/22 17:34 編集