質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2236閲覧

JPS、スコープ=application の変数内のHashMapから取り出した値の変更が出来ない

kouji

総合スコア29

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2016/04/08 13:04

<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の値を変更できるのでしょうか・・・

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次のようなJSPを書いてみました。
※動的Webモジュールはバージョン3.0です。
MasterUserには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>

投稿2016/04/10 04:43

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kouji

2016/04/13 04:01

argiusさん 回答有難うございます! 基本的には出来るのですね。 ならばほかに何か原因が有るという事になるのでその方向で調べてみます。 有難うございました。
kouji

2016/04/13 07:18

中々解決しません・・・ 追加情報としましてはjspが複数あってあるjspからajaxで他のjspにリクエストを飛ばし、そのjsp内で下記でとったmasterに値をセットしようとして失敗しています <jsp:useBean id="master" class="ap.Master" scope="application" />
argius

2016/04/13 07:27

ajaxは、jspの処理が及ぶところではなくHTMLを出力してから実行されている処理なので、再度その値をjspに渡してmasterを更新する処理を書く必要があると思います。
kouji

2016/04/15 05:40

argiusさん 再度回答有難うございます。 しつこく調べたらやっと原因が分かりました。 今回の質問とは関係の無い所で余計な記述が有りました。 具体的には HashMap <Integer,PlayUser>users_data というIntegerがkeyのusers_dataというデータが、あるユーザーのデータを持っているか調べるメソッドを public boolean hasUser(String user_id){ return users_data.containsKey(user_id); } とString型をkeyにして調べてしまっていました・・・・ お騒がせして申し訳有りませんでした。 ただ、argiusさんの本来なら出来るという情報で大分調査範囲が狭まり、助かりました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問