特殊なオブジェクトの詰まった配列を 「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>");}
その他環境など質問がありましたらなんでも聞いて頂ければお答えします!
重ねてよろしくお願いします。
あなたの回答
tips
プレビュー