JPS、スコープ=application の変数内のHashMapから取り出した値の変更が出来ない
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,447
<jsp:useBean id="master" class="ap.Master" scope="application" />
のようにmasterというアプリケーション全体で共通の変数を取り出し、
public class Master {
HashMap <String,User>user_list=new HashMap();
public User getUser(String id){
return user_list.get(id);
}
}
そこから
User user=master.getUser(3);
のようにmaster内のHashMapの中から何か変数を取り出したとします。
この時、何故か上記のuserに値をセット
user.setAge(12);
等としてもmasterの方のuserには影響せず。
この流れで取り出した上記のuserにのみ影響しています。
上記のmasterから取り出したuserは何か参照もmaster内の物と違うようです。
どうすればmaster内のuserの値を変更できるのでしょうか・・・
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
次のようなJSPを書いてみました。
※動的Webモジュールはバージョン3.0です。
※Master
とUser
にはtoString
をoverride実装してあります。
アクセスするたび、年齢の値が加算されるのが分かります。
もし取り出した情報を更新できないとしたら、このように動作しないはずです。
koujiさんが質問に書かれていない何かが影響している可能性はありますが、基本的には値の更新はできるはずです。
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="ap.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="master" class="ap.Master" scope="application" />
<!DOCTYPE html>
<html lang="true">
<head>
<meta charset="UTF-8" />
<title>Servlet1</title>
</head>
<body>
<p>master = <%= master %></p>
<%
if (!master.hasUser("John")) {
master.setUser("John", new User("John", 22));
}
User user = master.getUser("John");
user.setAge(user.getAge() + 1);
%>
<p>master = <%= master %></p>
</body>
</html>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/13 13:01
回答有難うございます!
基本的には出来るのですね。
ならばほかに何か原因が有るという事になるのでその方向で調べてみます。
有難うございました。
2016/04/13 16:18
追加情報としましてはjspが複数あってあるjspからajaxで他のjspにリクエストを飛ばし、そのjsp内で下記でとったmasterに値をセットしようとして失敗しています
<jsp:useBean id="master" class="ap.Master" scope="application" />
2016/04/13 16:27
2016/04/15 14:40
再度回答有難うございます。
しつこく調べたらやっと原因が分かりました。
今回の質問とは関係の無い所で余計な記述が有りました。
具体的には
HashMap <Integer,PlayUser>users_data
というIntegerがkeyのusers_dataというデータが、あるユーザーのデータを持っているか調べるメソッドを
public boolean hasUser(String user_id){
return users_data.containsKey(user_id);
}
とString型をkeyにして調べてしまっていました・・・・
お騒がせして申し訳有りませんでした。
ただ、argiusさんの本来なら出来るという情報で大分調査範囲が狭まり、助かりました。
有難うございました。