前提・実現したいこと
ArrayListに格納したインスタンスの中身(list.numberとlist.moji)をEL式を使って表示したいです。
EL式でArrayListの中身を表示するコードを書いたところ、NumberFormatException: For input string: "number"
のエラーメッセージが発生しました。
エラーを解消する方法をご教示いただけると幸いです。
発生している問題・エラーメッセージ
例外 org.apache.jasper.JasperException: [/WEB-INF/jsp/list.jsp] の処理中に行番号 [10] で例外が発生しました。 7: <title>EL式のテスト</title> 8: </head> 9: <body> 10: ${listAttribute.number} 11: ${listAttribute.moji} 12: </body> 13: </html> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:625) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:514) 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:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) servlet.ListServlet.doGet(ListServlet.java:51) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.NumberFormatException: For input string: "number" java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) java.base/java.lang.Integer.parseInt(Integer.java:652) java.base/java.lang.Integer.parseInt(Integer.java:770) javax.el.ListELResolver.coerce(ListELResolver.java:150) javax.el.ListELResolver.getValue(ListELResolver.java:67) org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:113) org.apache.el.parser.AstValue.getValue(AstValue.java:169) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:701) org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspService(list_jsp.java:124) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) 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:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) servlet.ListServlet.doGet(ListServlet.java:51) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
該当のソースコード
Java
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 request.setCharacterEncoding("UTF-8"); 3 4 ListTest lt = new ListTest(); 5 lt.setMoji("あいうえお"); 6 lt.setNumber(3); 7 8 //ArrayListに格納 9 List<ListTest> list = new ArrayList<>(); 10 list.add(lt); 11 12 // セッションスコープにコメントリストを保存 13 HttpSession session = request.getSession(); 14 session.setAttribute("listAttribute", list); 15 16 RequestDispatcher rd =request.getRequestDispatcher("/WEB-INF/jsp/list.jsp"); 17 rd.forward(request, response); 18 }
Java
1package model; 2 3public class ListTest { 4 private String moji; 5 private int number; 6 7 public String getMoji() { 8 return moji; 9 } 10 public void setMoji(String moji) { 11 this.moji = moji; 12 } 13 public int getNumber() { 14 return number; 15 } 16 public void setNumber(int number) { 17 this.number = number; 18 } 19}
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>EL式のテスト</title> 8</head> 9<body> 10${listAttribute.number} // この行でエラーが発生します。 11${listAttribute.moji} 12</body> 13</html>
試したこと
試しにjspを以下のように変更してみました。
変更前 ${listAttribute.number} ${listAttribute.moji} ↓ 変更後 ${listAttribute}
するとエラーは出ずに、下記のようにインスタンスのアドレス?が表示されました。
[model.ListTest@5ac1a2e8]
インスタンスは取得できているようです。
また以下のように存在しないプロパティを指定してみると同じエラーが出ました。
変更前 ${listAttribute.number} ↓ 変更後 ${listAttribute.hogehoge}
補足情報(FW/ツールのバージョンなど)
Java 13.0.1
Eclipse 2019-9

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。