【最大10000ポイント】当たる!!質問投稿キャンペーン!

application.setAttributeとapplication.getAttributeを使ってint型変数の値を共有したいと思っています。
String型だとうまくいくのですがint型だとうまくいかないのです。

下記の上のソースはString型でのソースです。これの
String storedData = "JSPサンプル";
の部分をint型に変えたいと考えています。
下のソースはint型に変えたのですが,
Object型からint型にキャスト変換できないようなエラーが出て動きませんでした。

int型の変数を方法をapplication.setAttributeで使う方法はどうすればいいのでしょう?
ご存知のかたいらっしゃいましたら教えてください。よろしくお願いします。

-----------------------------------------------
<%@ page contentType="text/html;charset=Shift_JIS" %>
<html>
<head><title>Sample</title></head>
<body>
<%
//applicationオブジェクトに保存
String storedData = "JSPサンプル";
application.setAttribute("appdata",storedData);
//applicationオブジェクトから読み出し
Object readData = application.getAttribute("appdata");
String readDataString=(String)readData;
%>
applicationオブジェクト保存データ:<b><%= readDataString %></b>
</body>
</html>


-----------------------------------------------

<%@ page contentType="text/html;charset=Shift_JIS" %>
<html>
<head><title>Sample0</title></head>
<body>
<%
int storedData = 10;
application.setAttribute("appdata",storedData);
//applicationオブジェクトから読み出し
Object readData = application.getAttribute("appdata");
int readDataString=(int)readData;
%>
applicationオブジェクト保存データ:<b><%= read %></b>

</body>
</html>

このQ&Aに関連する最新のQ&A

A 回答 (3件)

int storedData = 10;


intObject = new Integer(int storedData);
application.setAttribute("appdata", intObject);

ですね。intをIntegerに変換してsetAttributeに渡します。

//applicationオブジェクトから読み出し
Object readData = application.getAttribute("appdata");
Integer intReadData = (Integer)readData;
int readDataString = intReadData.intValue();

こちらも。getAttributeはObjectしか返さないので、受け取ってからIntegerにキャストし、その後で読み取っています。

この回答への補足

直していただいてありがとうございます。
しかし、intObject = new Integer(int storedData);
の部分で、下記のエラーが出てしまいうまく動きません。

生成されたサーブレットのエラーです:
Syntax error on token "int", delete this token

プログラムのソースの問題ではなく、なにか他に問題があるのでしょうか?

補足日時:2006/08/20 23:04
    • good
    • 0

あー、すいません、元ソースのバグの一つですね。

消し忘れてました。
intObject = new Integer(storedData);
が正解です。
#いちいち動作確認してませんので・・・

あと、
int readDataString = intReadData.intValue();
の部分も、どうせ使うときは文字型なので

String readDataString = intReadData.toString();
の方がよさそうですね。

#他に単純ミスがあれば、自力で直してください。

この回答への補足

何度もすいません。エラーの種類が変わっただけで出来ませんでした。

intObject = new Integer(storedData);
application.setAttribute("appdata", intObject);

の部分で
intObject cannot be resolved
のエラーが起きてしまいます。

補足日時:2006/08/21 01:19
    • good
    • 0
この回答へのお礼

若干違うやり方で解決致しました。
ありがとうございました。

お礼日時:2006/08/21 16:09

Object型は全ての親クラスと入門書等にはありますが、プリミティブ型はその限りではありません。



intの場合はIntegerにラップしてセットするのが妥当だと思います。

・int→Integer
 new Integer(int i);

・Integer→int
 Integer#intValue();

この回答への補足

ラップしてセットするとはどのような記述をすれば良いのでしょうか?

直接new Integerを追加すると、追加した7行目で下のエラーが出てしまいました。
Syntax error on token "int", delete this token


-----------------------------------------------
<%@ page contentType="text/html;charset=Shift_JIS" %>
<html>
<head><title>Sample</title></head>
<body>
<%
int storedData = 10;
new Integer(int storedData);
application.setAttribute("appdata",storedData);
//applicationオブジェクトから読み出し
Object readData = application.getAttribute("appdata");
int readDataString = Integer.parseInt(readData);
%>
applicationオブジェクト保存データ:<b><%= readDataString %></b>
</body>
</html>

補足日時:2006/08/20 00:50
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qセッションを使ったint型の値の保持

こんにちは。
少し文が長いですがよろしくお願いします。

AccessのDBから取得したint型の値を、セッションを使って保持したいのですが

while(rs.next()){
String name = rs.getString("NAME");
int value = rs.getInt("VALUE");
HttpSession session1 = req.getSession(true);
HttpSession session2 = req.getSession(true);
session1.setAttribute("Name", name);
session2.setAttribute("Value", value);
dispatcher2.include(req, res);
}

のコードの

session2.setAttribute("Value", value);

でコンパイルエラー

DBAccess.java [37:1]
javax.servlet.ServletRequest の setAttribute(java.lang.String,java.lang.Object) は (java.lang.String,int) に適用できません。

がでてうまくいきません。
セッションを使ってint型の値の保持を行うにはどうすればよいのでしょうか?

こんにちは。
少し文が長いですがよろしくお願いします。

AccessのDBから取得したint型の値を、セッションを使って保持したいのですが

while(rs.next()){
String name = rs.getString("NAME");
int value = rs.getInt("VALUE");
HttpSession session1 = req.getSession(true);
HttpSession session2 = req.getSession(true);
session1.setAttribute("Name", name);
session2.setAttribute("Value", value);
dispatcher2.include(req, res);
}

のコードの

sessio...続きを読む

Aベストアンサー

>java.lang.NullPointerException

と言っていると言う事は、この場合、session.getAttribute("Value") で正しい
値が取得出来ていないと言う可能性があります。nullが返って来ているとか。。。
と、言う事は、setAttribute でちゃんと値をセット出来ていないか、セッションが切れちゃってるとか。。。

あ、それより、代入先の配列の宣言に問題があるとかは無いでしょうか?
配列は、ちゃんと、確保されていますか?
最初の補足欄では、配列の要素数を指定していませんでしたが。。。

可能性は、いろいろと考えられるので、ここでは、「これ!」と言う事は出来ません。
いろいろと調べてみて下さい。
原始的ですが、一行ごとに変数の値を表示する等してみれば、案外すぐにどれが問題なのかが
分かる場合が多いです。

>getValue()/putValue()は非推奨メソッドになりました。今のJ2EEでは通りません。
そうなんですか。。。
非推奨になっているんですか。。でも、非推奨だったら、通らないことは無いんじゃないですか?
推奨しないだけでは。。。?
でも、使わないに越したことは無いって言うことですね。
訂正ありがとうございました。

>java.lang.NullPointerException

と言っていると言う事は、この場合、session.getAttribute("Value") で正しい
値が取得出来ていないと言う可能性があります。nullが返って来ているとか。。。
と、言う事は、setAttribute でちゃんと値をセット出来ていないか、セッションが切れちゃってるとか。。。

あ、それより、代入先の配列の宣言に問題があるとかは無いでしょうか?
配列は、ちゃんと、確保されていますか?
最初の補足欄では、配列の要素数を指定していませんでしたが。。。

可能性は、い...続きを読む

QsetAttribute(String, int)は適用できない

setAttribute(String, int)は適用できない

今、servletでセッションの勉強をしています。
ある本に載っているソースコードをそのままコピーしたんですが、

「HttpSessionのメソッド setAttribute(String, Object)は(String, int)に適用できません。」

…というエラーが出て動きません。
こういう場合、実行するにはどうしたら良いのでしょうか?
アクセスした回数をカウントすることなんてよくあると思うんです。
intも(Stringなんかも)Objectの下に含まれてるんじゃないんですか?
intでも良い気がするんですけど…。
一応、ソースコードを貼っておきます:

### Sample229TestServlet.java ###
package com.tips;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Sample228TestServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;

private int count = 0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("param",count++); //問題の箇所
out.println("<html><head><title>Sample228</title></head><body>");
out.println("<h2>SessionAttributeListenerの例</h2>");
out.println("sessionの属性countが" + count + "に変化しました。");
out.println("</body></html>");
out.close();
}
}

### Sample228.java ###
package com.tips;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class Sample228 implements HttpSessionAttributeListener {

public void attributeAdded(HttpSessionBindingEvent event) {
}

public void attributeRemoved(HttpSessionBindingEvent event) {
}

public void attributeReplaced(HttpSessionBindingEvent event) {
ServletContext app = (event.getSession()).getServletContext();
app.log(">> Sample228 Listener detects attribute changed.");
}

}

…必要であれば補足します。では、宜しくお願いします。

setAttribute(String, int)は適用できない

今、servletでセッションの勉強をしています。
ある本に載っているソースコードをそのままコピーしたんですが、

「HttpSessionのメソッド setAttribute(String, Object)は(String, int)に適用できません。」

…というエラーが出て動きません。
こういう場合、実行するにはどうしたら良いのでしょうか?
アクセスした回数をカウントすることなんてよくあると思うんです。
intも(Stringなんかも)Objectの下に含まれてるんじゃないんですか?
intでも良い気がするんですけ...続きを読む

Aベストアンサー

int はプリミティブ型なので、Objectクラスのサブクラスにはあたりません。

> session.setAttribute("param",count++); //問題の箇所
の部分は、ラッパークラスを使用して、
session.setAttribute("param", new Integer(count++));
等としておくと、コンパイルできるんじゃないかな。

Qラジオボタンの選択肢をサーブレットで取得するには?

サーブレットの開発を行っていますが、ブラウザー側で
ラジオボタンを選択した際に何を選択したかのデータを取得したいのです。
(下記のHTMLで言えば、割引手形か、手形貸付か、証書貸付というのを取得したいのです)
パラメーターをサーブレットで受け取りたいのですが
うまくいきません
HTMLでHIDDENを使用するとか聞いたことはあるのですがどのようにコーディングすればいいんでしょうか?
よろしくお願いいたします。

<p>
<input type="radio" name="radiobutton" value="radiobutton">
割引手形 
<input type="radio" name="radiobutton" value="radiobutton">
手形貸付 
<input type="radio" name="radiobutton" value="radiobutton">
証書貸付
</p>

ブラウザー側からは
<form action="http://localhost/servlet/yuushi" method=post>
の指定を行っています。
サーブレットでの受け取り方を、
String p2=request.getParameter("radiobutton");
 とすると、p2=radiobuttonとデータがセットされました。

サーブレットの開発を行っていますが、ブラウザー側で
ラジオボタンを選択した際に何を選択したかのデータを取得したいのです。
(下記のHTMLで言えば、割引手形か、手形貸付か、証書貸付というのを取得したいのです)
パラメーターをサーブレットで受け取りたいのですが
うまくいきません
HTMLでHIDDENを使用するとか聞いたことはあるのですがどのようにコーディングすればいいんでしょうか?
よろしくお願いいたします。

<p>
<input type="radio" name="radiobutton" value="...続きを読む

Aベストアンサー

それぞれの項目の value を、ユニークにして下さい。例えば、

<input type="radio" name="radiobutton" value="1"> 割引手形 
<input type="radio" name="radiobutton" value="2"> 手形貸付 
<input type="radio" name="radiobutton" value="3"> 証書貸付

そうすれば、「手形貸付」を選択したときに

String p2 = request.getParameter("radiobutton");

とすれば、p2 は "2" になります。

Qservletからjspへオブジェクトの配列情報を送る方法

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、各情報をsetする。
HttpServletRequestにsetAttributeでFileInfomation情報を付加し、
disp.jspへforwardする。

※以下の方法を考えています。
request.setAttribute("fileinfo1", fileinfo[0]);
request.setAttribute("fileinfo2", fileinfo[1]);
request.setAttribute("fileinfo3", fileinfo[2]);
・・・
(配列でsetAttributeできるのかわからなかったので、
 とにかくファイルの数分setAttributeしてみました)

getServletContext().getRequestDispatcher("/disp.jsp").forward(req, res)

わからないこと:
disp.jspでどのようにFileInfomationの情報を取得し、
内容を参照できるのかがよくわからないのです。
jspの暗黙オブジェクトrequestを使用して、request.getParameterをすると、
返ってくる値がStringのようなので、FileInfomationクラスにならないんですよね?

突っ込みどころ満載の質問かと思いますが、何かアドバイス頂ければと思います。
オブジェクトの配列をsetAttributeしてjspで読み出せる方法があれば、
それもご教授いただけますでしょうか。
よろしくお願いいたします。jsp難しいです・・・。

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、...続きを読む

Aベストアンサー

setなんちゃらメソッドで値を設定したら、getなんちゃらメソッドを呼べば良かったのです。つまり、set/get以下が同名のメソッド同士をセットで使えば良いのです。
今回の場合は、getAttributeメソッドですね。
戻り値はObjectですがこれはキャストすれば良いのです。
FileInfomation 変数 = (FileInfomation)request.getAttribute("fileinfo1");
てな具合です。

なお、getParameterメソッドは、クライアント(ブラウザ)から送信されたパラメータを取得するメソッドです。

さて、話を次の段階に進めて、配列を受け渡しできるか?となりますが、、できます。
サーブレット側で、
request.setAttribute("キー文字列", fileinfo);
として、JSP側で、
FileInfomation[] 変数 = (FileInfomation[])request.getAttribute("キー文字列");
とすれば、良いのです。

QJSP内でString型からint型に変換する方法(SAStruts使用)

現在、SAStrutsを使用して、カレンダーの年表を作成しています。
Formクラスで定義したString型の変数を、JSP内でint型に変換するのが、うまくいきません。
申し訳ございませんが、ご教授いただけませんでしょうか。
よろしくお願い致します。

Aベストアンサー

request.getParameter("max_c");
というのは
リクエストURLに
http://~/~?max_c=xxx
のようになっていないと取得できません。
リクエストに格納されているデータは
getAttributeを使います。
ちなみに格納するときは
setAttribute

String strMax = ((formBeanの型)request.getAttribute("formBeanのキー")).getMax_c();

こんな感じ。

QsetAttribute getAttribute 配列内容受け渡し  について 

こんいちは。
setAttributeでセットした値をgetAttributeを使用して表示したいのですがうまくいきません。

あとsession.setAttributeとrequest.setAttributeの違いがわかりません。
session はなんとなくわかるのですが、requestがいまひとつわかりません。

どなたか教えていただけないでしょうか?
よろしくお願いいたします。

下記がコーディングの内容です。

test.jsp

<%@ page contentType="text/html;charset=Shift_JIS"
import="java.sql.*, java.util.*" %>
<%

String[] desc={"aaa","bbb","ccc","ddd","eee"};
session.setAttribute("desc",desc);

Vector vect = (Vector)session.getAttribute("dpt");

Iterator itr = vect.iterator();

while(itr.hasNext()) {
String[] temp = (String[])itr.next();

out.println(temp[0]);
out.println(temp[1]);
}
%>
<html>
<body>
t_3 test
</body>
</html>

こんいちは。
setAttributeでセットした値をgetAttributeを使用して表示したいのですがうまくいきません。

あとsession.setAttributeとrequest.setAttributeの違いがわかりません。
session はなんとなくわかるのですが、requestがいまひとつわかりません。

どなたか教えていただけないでしょうか?
よろしくお願いいたします。

下記がコーディングの内容です。

test.jsp

<%@ page contentType="text/html;charset=Shift_JIS"
import="java.sql.*, java.util.*" %>
<%

String[] ...続きを読む

Aベストアンサー

String[] desc={"aaa","bbb","ccc","ddd","eee"};
session.setAttribute("desc",desc);

Vector vect = (Vector)session.getAttribute("dpt");

Iterator itr = vect.iterator();


うまくいくわけがないですね。

String[]
型で格納したんだから。
受け取る時も、
String[]
型でキャストしないと無理です。
なぜ
Vectorでキャストするのでしょうか?

それに格納するときの
キー値が
"desc"
になっていて
どうして、
取得する時キー値が
"dpt"
にしているのでしょうか?


requestは
Httpプロトコルでいうところの1つセッション
をあらわすオブジェクトをサーブレットコンテナ
が実装したものです。

session
はブラウザのプロセスに対応する
セッションIDと該当するHttpSession
オブジェクトをサーブレットコンテナ側で
生成して、
一定期間存続させることで、
あたかも、セッションが確立させしているように
Http上でみせかけるための
しくみを提供するものです。

詳細は調べてください。

以上

String[] desc={"aaa","bbb","ccc","ddd","eee"};
session.setAttribute("desc",desc);

Vector vect = (Vector)session.getAttribute("dpt");

Iterator itr = vect.iterator();


うまくいくわけがないですね。

String[]
型で格納したんだから。
受け取る時も、
String[]
型でキャストしないと無理です。
なぜ
Vectorでキャストするのでしょうか?

それに格納するときの
キー値が
"desc"
になっていて
どうして、
取得する時キー値が
"dpt"
にしているのでしょうか?


request...続きを読む

QリクエストからArrayListのデータが取得出来ない

いつもお世話になっております。

表題の通り、リクエストからArrayListのデータが取得出来ないのです。

javaで、
ArrayList cmArray = new ArrayList();
データベースからデータ取得
request.setAttribute("category",cmArray.toArray());

jspで
ArrayList list = new ArrayList();
list = (List)request.getAttribute("category");
と取得しようとしています。
そうすると、java.lang.ClassCastExceptionが発生してしまいます。

どなたか分かる方がいましたら、ご教授下さい。
よろしくお願い致します。

Aベストアンサー

requestには、cmArray.toArray()でObjectの配列が入ってます。
なのでJSPでListで受け取ろうとしてClassCastExceptionが発生しています。

request.setAttribute("category",cmArray);
でいいんではないでしょうか。

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

QJSPからクラス(サーブレット)を呼び出す方法

JSPからクラス(サーブレット)を呼び出そうとしてるんですが
以下のエラーになってしまいます。
The requested resource (/Hello) is not available.

ネットで調べてみたら、パスの指定の仕方が悪いんじゃないかって感じがするので
色々パスを弄ってみましたが、ずっとavailableになります。
わかる方いらっしゃったらアドバイスよろしくお願いします。

※usebeanはこのエラーの前の段階で、getとset両方動くのを確認しています。
※「http://localhost:8080/javaroad/Hello」を直接WEBブラウザのURLに入れたら動きました。

【フォルダ構成 (Tomcat 6.0\webappsの直下) 】

javaroad
---------- index.jsp
---------- WEB-INF
-------------------- web.xml
-------------------- classes
---------------------------- HelloServlet.class

【index.jsp】
<%@ page contentType="text/html;charset=Shift_JIS" %>
<jsp:useBean id="GSBean" class="Testaaa.GetSetBean" />
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<form method="post" action="/Hello">
<input type="text" name="name1" maxlength="10" style="ime-mode: disabled">
<jsp:setProperty name="GSBean" property="userID" param="name1" />
<br><br>
<input type="submit" value="submit">
</form>
</body>
</html>

【web.xml】
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>

</web-app>

【HelloServlet.class】
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println(new java.util.Date());
out.println("</BODY>");
out.println("</HTML>");
}

以下試して駄目だったパスの一覧です。
<form method="post" action="Hello">
<form method="post" action="/Hello">
<form method="post" action="../servlet/Hello">
<form method="post" action="HelloServlet">
<form method="post" action="/HelloServlet">
<form method="post" action="../servlet/HelloServlet">
<form method="post" action="WEB-INF\classes/HelloServlet">
<form method="post" action="http://localhost:8080/javaroad/Hello">

JSPからクラス(サーブレット)を呼び出そうとしてるんですが
以下のエラーになってしまいます。
The requested resource (/Hello) is not available.

ネットで調べてみたら、パスの指定の仕方が悪いんじゃないかって感じがするので
色々パスを弄ってみましたが、ずっとavailableになります。
わかる方いらっしゃったらアドバイスよろしくお願いします。

※usebeanはこのエラーの前の段階で、getとset両方動くのを確認しています。
※「http://localhost:8080/javaroad/Hello」を直接WEBブラウザのURLに入れたら動...続きを読む

Aベストアンサー

<form method="get" action="Hello">

ではないでしょうか。


人気Q&Aランキング