- PR -

vectorに格納した値をJSPで表示?

1
投稿者投稿内容
鈴の木
会議室デビュー日: 2007/01/17
投稿数: 5
投稿日時: 2007-01-17 13:21
はじめまして、こんにちわ。
まず最初にレベルの低く簡単な内容の質問になってしまうかと思いますが当方現在学生のjava初心者です。しかしIT業界で生きていこうと勉強しておりますので稚拙な箇所がありましてもお許し下さい。レベルアップの為の厳しい叱咤はよろしくお願い致します。

サーブレットでオラクルデータベースから値を取り出してそれをvectorに格納して値を返し、それをJSPで表示するという事をやっています。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=Shift_JIS"%>
<%@ page import="java.util.Vector, java.util.Enumeration, java.util.HashMap"%>

<% Vector vector = (Vector)request.getAttribute("vector"); %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
<title>forward</title>
</head>

<body>

<% if(vector!=null){
out.println(vector);
}
%>

</body>
</html>

☆以下結果☆
[{YEAR=2006, SAL=178600, BONUS=1, AREA=神奈川県, URL=http://xxx.yyy.zzz, JOB=店舗担当, NAME=株式会社abc, NO=613},]
------------------------------------------------------------------------------
上記の様にオラクルから抽出したデータを表示する事が出来る状況になっています。
この体裁を整えようとしてエラーが発生してしまい解決出来ないのが現状です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.util.Vector, java.util.Enumeration, java.util.HashMap"%>

<% Vector vector = (Vector)request.getAttribute("vector");%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
<title>Resultjsp</title>
</head>
<body>

<%
if(vector != null){
%>

 <table summary="a_list" border="1">
  <tr bgcolor="#FFFFC0">
   <td align="center"> year </td>
   <td align="center"> no </td>
   <td align="center"> name </td>
   <td align="center"> job </td>
   <td align="center"> area </td>
   <td align="center"> sal </td>
   <td align="center"> bonus </td>
   <td align="center"> url </td>
 </tr>

<%
 String year = "";
 String no = "";
 String name = "";
 String job = "";
 String area = "";
 String sal = "";
 String bonus = "";
 String url = "";

 Enumeration enume = vector.elements();
 while (enume.hasMoreElements()) {
  HashMap hp = (HashMap)enume.nextElement();
☆注意☆
  year = (String)hp.get("year");
  no = (String)hp.get("no");
  name = (String)hp.get("name");
  job = (String)hp.get("job");
  area = (String)hp.get("area");
  sal = (String)hp.get("sal");
  bonus = (String)hp.get("bonus");
  url = (String)hp.get("url");
☆注意☆
%>

<tr>
<td> <%= year %> </td>
<td> <%= no %> </td>
<td> <%= name %> </td>
<td> <%= job %> </td>
<td> <%= area %> </td>
<td> <%= sal %> </td>
<td> <%= bonus %> </td>
<td> <%= url %> </td>
</tr>

<% } %>

</table>

<% } else { %>

<font color="red"><strong>データが抽出されませんでした。</strong></font>

<% } %>

</body>
</html>
-----------------------------------------------------------------------------
上記の結果はnullと結果が表示されてしまい、☆注意☆の部分を

year = ((Long)hp.get("year")).toString();
no = ((Long)hp.get("no")).toString();
name = ((String)hp.get("name")).trim();
job = ((String)hp.get("job")).trim();
area = ((String)hp.get("area")).trim();
sal = ((Long)hp.get("sal")).toString();
bonus = ((Long)hp.get("bonus")).toString();
url = ((String)hp.get("url")).trim();

と変更すると

org.apache.jasper.JasperException: An exception occurred processing JSP page /Result.jsp at line 45
42: while (enume.hasMoreElements()) {
43: HashMap hp = (HashMap)enume.nextElement();
44:
45: year = ((Long)hp.get("year")).toString();
46: no = ((Long)hp.get("no")).toString();
47: name = ((String)hp.get("name")).trim();
48: job = ((String)hp.get("job")).trim();

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:555)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


原因

java.lang.NullPointerException
org.apache.jsp.Result_jsp._jspService(Result_jsp.java:102)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


というエラーが出てしまいます。
調べても分からず停滞が続いていまして・・勉強不足は承知の上、大変恥ずかしいのですがお助け下さいよろしくお願い致します。
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2007-01-17 13:45
MapのキーがYEARやSALといった大文字になっているのに、getメソッドに渡している引数が小文字なのが原因かと思われます。
NullPointerExceptinが発生しているのは、上記理由でnullが返ってきているのにtoStringを呼んでいるからです。
鈴の木
会議室デビュー日: 2007/01/17
投稿数: 5
投稿日時: 2007-01-17 14:46
SUK2さん>
レスありがとうございます。
文字サイズを整えると

org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


原因

java.lang.NullPointerException
org.apache.jsp.Result_jsp._jspService(Result_jsp.java:102)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

------------------------------------------------------------------------------
上記のようになります。何か他の理由でnullが返されてしまっているのですよね?


NullPointerExceptin、オブジェクトの生成(?)。この辺りの勉強をもっとしてみます。引き続き何か参考や原因についてのアドバイスよろしくお願い致します。
SUK2さんありがとうございます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-17 15:32
>上記のようになります。何か他の理由でnullが返されてしまっているのですよね?
「何か他の理由」、というか、SUK2さんが指摘されている通りではないでしょうか。
HashMap のキーがケースセンシティブだからです。

まず、Java 自体に慣れるために、JSP でがんばる前に同等のコードをスタンドアロンで実行出来る Java プログラムで表現してみることをオススメします。
鈴の木
会議室デビュー日: 2007/01/17
投稿数: 5
投稿日時: 2007-01-17 15:39
インギさんレスありがとうございます。

スタンドアロンで実行出来る Java プログラムで表現してみることをオススメします>
さっそくやってみます。やはり前提知識が薄すぎるなと痛感、また停滞してしまったら質問させて頂きたいと思います。
その際は申し訳ございませんがよろしくお願い致します。


1

スキルアップ/キャリアアップ(JOB@IT)