質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

0回答

1985閲覧

Userオブジェクトの配列をServletからJSPに送りたいです。

arukana-1

総合スコア10

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2020/01/17 03:11

編集2020/01/17 03:44

特殊なオブジェクトの詰まった配列を 「Servlet」から「jsp」を送りたいと思っています。
具体的にはServletからrequest.setAttribute()で送り、jspはgetAttribute()もしくはgetParameterValue()で受け取ろうと考えています。
その際のjsp側での受け取りの型宣言等はどのようにすればいいのでしょうか?
分かる方がいらっしゃいましたら教えて頂けると大変助かります。

ちなみにオブジェクトは「User」オブジェクトで
h2データベースからEntityManager等を使いSQL文で検索した結果のオブジェクトです。
Userオブジェクトは
idはint
UserId・NameはVARCHAR
で構成されています。

Servlet

1 2package web.jpa; 3 4import java.io.IOException; 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11import javax.servlet.http.HttpSession; 12import java.lang.reflect.Field; 13import java.io.*; 14import java.util.*; 15import java.time.LocalDateTime; 16import java.time.format.DateTimeFormatter; 17import javax.servlet.RequestDispatcher; 18import javax.persistence.EntityManager; 19import javax.xml.ws.Response; 20 21 22@WebServlet("/search") 23public class SearchUserServlet extends HttpServlet{ 24 public void doGet(HttpServletRequest request, 25 HttpServletResponse response) throws ServletException, IOException{ 26 response.setContentType("text/plain; charset=utf-8"); 27 28 //URLのパラメータnameを取得しワイルドカードを両端につける。 29 String url_name = "%" + request.getParameter("name") + "%"; 30 EntityManager em = EntityManagerFactory.create(); 31 em.getTransaction().begin(); 32 try { 33 List<User> name_list = em.createQuery( 34 "SELECT u FROM User u WHERE u.name LIKE :name ", 35 User.class).setParameter("name", url_name) 36 .getResultList(); 37 38 request.setAttribute("name_list", name_list); 39 request.getRequestDispatcher("/WEB-INF/jpa/search.jsp").forward(request, response); 40 41 } finally { 42 em.close(); 43 } 44 } 45}

Jsp

1 2<%@page contentType="text/html" pageEncoding="utf-8"%> 3<%@page import="java.util.*" %> 4<%@page import="javax.persistence.EntityManager" %> 5<!doctype html> 6<html> 7<head> 8<meta charset="utf-8"> 9</head> 10<body> 11<table> 12 <tr> 13 <td>Id</td> 14 <td>userId</td> 15 <td>name</td> 16 </tr> 17 18 19<% 20//ここのオブジェクトがエラーを吐く。 21List<User> name_list = (List<User>)request.getAttribute("name_list"); 22for (User data: name_list){ 23 out.println("<tr><td>" + String.valueOf(data.getId()) + "</td>"); 24 out.println("<td>" + data.getUserId() + "</td>"); 25 out.println("<td>" + data.getName() + "</td></tr>");} 26%> 27</table> 28 29</body> 30</html>

JSPのエラー↓

Multiple annotations found at this line: - Type safety: Unchecked cast from Object to List<User> - Line breakpoint:search.jsp [line: 20]

JSPの実行結果

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: [/WEB-INF/jpa/search.jsp] の中の[19]行目でエラーが発生しました User cannot be resolved to a type 16: </tr> 17: 18: <% 19: List<User> name_list = (List<User>)request.getAttribute("name_list"); 20: for (User data: name_list){ 21: out.println("<tr><td>" + String.valueOf(data.getId()) + "</td>"); 22: out.println("<td>" + data.getUserId() + "</td>"); JSPファイル: [/WEB-INF/jpa/search.jsp] の中の[19]行目でエラーが発生しました User cannot be resolved to a type 16: </tr> 17: 18: <% 19: List<User> name_list = (List<User>)request.getAttribute("name_list"); 20: for (User data: name_list){ 21: out.println("<tr><td>" + String.valueOf(data.getId()) + "</td>"); 22: out.println("<td>" + data.getUserId() + "</td>"); JSPファイル: [/WEB-INF/jpa/search.jsp] の中の[20]行目でエラーが発生しました User cannot be resolved to a type 17: 18: <% 19: List<User> name_list = (List<User>)request.getAttribute("name_list"); 20: for (User data: name_list){ 21: out.println("<tr><td>" + String.valueOf(data.getId()) + "</td>"); 22: out.println("<td>" + data.getUserId() + "</td>"); 23: out.println("<td>" + data.getName() + "</td></tr>");}

その他環境など質問がありましたらなんでも聞いて頂ければお答えします!
重ねてよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/17 03:23

インポート・・・
yureighost

2020/01/17 03:31

JSPのエラーの部分のメッセージはObject型からList総称型にキャストすると出る警告で、 プログラムが停止することはないと思うのですが。 落ちて実行できないのかメッセージが気になるだけなのかどちらでしょう。 警告だけなら該当のコード部分の上に @SuppressWarnings("unchecked") を張れば警告を抑制できます。
arukana-1

2020/01/17 03:52

@yureighostさん jspの警告ばかりに目がいっていて実行をしていませんでした。 ご指摘本当にありがとうございます。 実行結果はHTTPステータス500でやはりリスト受け取りの型に関してのエラーみたいです。 詳細は↑の本文に追記いたしました。 @asahina1979さん なにがしかインポートすれば動作するということでしょうか・・・? もしくは今書いてあるインポートがおかしいということでしょうか・・・? このUserオブジェクトに関して関係あるとすればEntityManageFactoryかと思っていたのでインポートしていたんですが、他のものだったのでしょうか? 申し訳ありません、察しが悪いものでまだご指摘が理解できていないです。
yureighost

2020/01/17 03:53

追加されたJSPの実行結果のエラーメッセージなら、 asahina1979さんが書かれている通り、JSP側でUserクラスのimportをしていないのが原因ですね。
yureighost

2020/01/17 04:14

同じパッケージのクラスはimportせずに使えるので、javaのソースを特に改変していないなら、 Userクラスは「web.jpa」パッケージ配下にあるんじゃないかと思いますがどうでしょうか。
arukana-1

2020/01/17 04:32

ありがとうございます! ご指摘いただいた通りUserクラスの定義があるjavaのインポートで動作いたしました。 半日ほど悩んでいたのですっきりとした気分になれました。 お付き合い頂き本当にありがとうございます。 yureighostさん asahina1979さん 感謝感謝です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問