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

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

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

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

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

5725閲覧

struts2を使いjavaで作成した配列を使って動的なselectボックスを作りたい

settyan

総合スコア60

Java

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

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

3クリップ

投稿2016/07/19 01:30

編集2016/07/20 00:24

お世話になっております。
早速本題に入らせていただきます。
やりたいこと

http://www.pori2.net/js/form/5.html
ここのサイト様で解説されているような片方の値に連動してもう片方のボックスの中身が変わるようなセレクトボックスの作成がしたいんのですが、、、

javascriptで中身を固定値で生成してリストを作成することはできました。

ですが、ここからが問題で最終的にやりたいことはjava側で取得した値をjavascript(struts2なのでAction経由)に渡してその値を元にリストを生成したいんです。

例で言うと左側のボックスで「2015」を選ぶと右側のボックスには「9,10,11,12」が表示され「2016」を選ぶと「1,2,3,4」が表示されるみたいな感じです。

素人目ですがHashMapでいいかなーと思いやってみたんですが、まずjsp側にmapがわたらず、それに関して調べていたら、Keyがnameに入りvarがvarに入るみたいな記述をみつけ、断念しました。

最初のボックスでKeyを選ばせ、つぎのボックスでKeyに対応した値だせばいいのか?みたいな単純な考えは打ち砕かれました。

どなたかやり方をご教授できれば幸いです。

###コード

html

1<div id="k"> 2 //その他処理 3 <div class="tabbox"> 4 //その他処理 5 <font size="5"></font></a 6 <!-- タブ中身--------------------> 7 <div id="tab2" class="tab"> 8 <s:form > 9 <h2> 画面 </h2> 10 //別処理 11 12 <script> 13 var list = { 14 <s:iterator value="ym_map"> 15 <s:property value="key" />: [ 16 <s:iterator value="value"> 17 <s:property /> 18 </s:iterator> 19 ], 20 </s:iterator> 21 }; 22 </script> 23 <div class="ib-box"> 24 <s:select list="monthMap" id="yearList" onchange="aaa"></s:select> 25 </div> 26 27 <div class="ib-box"> 28 <select id="monthList" ></select> 29 </div> 30 <div class="ib-box"> <s:submit value="検索" /> </div> 31 //その他処理 32 </s:form> 33 </div> 34 </div> 35</div>

のような感じで処理を書いています。

<script>の中身をhtml文上のほうに書くと「],」の場所でコンパイルエラーが起き、この書き方をすると「<s:iterator>」の箇所でエラーが起きてしまいます。 YearListに年を入れ、その年に対応する月をmonthListに入れることは可能なのでしょうか? ご教授よろしくお願いします。 エラー箇所の画像 --- ![エラー文](693de2e95e92826c174f476c4d2ab520.png) ![エラー文](8c11e4727886e45042a33e2b8440bb9e.png)
A-pZ👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

つまりはjavascriptで扱える連想配列をJSPで書ければ良いのですよね?

まずjsp側にmapがわたらず、それに関して調べていたら、Keyがnameに入りvarがvarに入るみたいな記述をみつけ、断念しました。

こちらについてはすみませんが、質問の意図がわかりかねます。

最終的にやりたいことはjava側で取得した値をjavascript(struts2なのでAction経由)に渡してその値を元にリストを生成したいんです。

例で言うと左側のボックスで「2015」を選ぶと右側のボックスには「9,10,11,12」が表示され「2016」を選ぶと「1,2,3,4」が表示されるみたいな感じです。

こちらについては下記のようにJavascriptで扱える配列を記述できると思います。

Java

1Map<Integer, List<Integer>> ym_map = new HashMap<Integer, List<Integer>>(); 2ym_map.put(2015, new ArrayList<Integer>()); 3ym_map.get(2015).add(9); 4ym_map.get(2015).add(10); 5ym_map.get(2015).add(11); 6ym_map.get(2015).add(12); 7ym_map.put(2016, new ArrayList<Integer>()); 8ym_map.get(2016).add(1); 9ym_map.get(2016).add(2); 10ym_map.get(2016).add(3); 11ym_map.get(2016).add(4); 12

JSP

1<script> 2var list = { 3<s:iterator value="ym_map"> 4 <s:property value="key" />: [ 5 <s:iterator value="value"> 6 <s:property /> 7 </s:iterator> 8 ], 9</s:iterator> 10}; 11</script>

↓結果

html

1<script> 2var list = { 3 2015:[9, 10, 11, 12], 4 2016:[1, 2, 3, 4], 5}; 6</script>

となると思います。

投稿2016/07/19 02:22

編集2016/07/19 02:23
mty.ad

総合スコア145

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

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

settyan

2016/07/19 04:06 編集

ご解答ありがとうございます。 ためしにべた書きで書いてみたところ。 HTMLの結果がList ={}になってしまいました。 getterやsetterの設定は必要でしょうか? 追記-------------------------------- getter,setterを追記してみたところ以下のようなエラーが出ました。 tag 'select', field 'list': The requested list key 'ym_map' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location] それとjavaScriptの記述場所はHTML文の頭でいいのでしょうか? HTML文の最中に置くとエラーがでてしまうのですが...
mty.ad

2016/07/19 02:47

Map<Integer, List<Integer>> ym_mapはリクエストスコープ内に定義しないとダメです。 ActionFormとか使っていますか?使っているのであればそこに定義したらどうでしょう?
A-pZ

2016/07/19 03:29

Struts2にActionFormはありませんよ
settyan

2016/07/19 04:06

ご指摘されたところを調べました。A-pzさんのおっしゃるとおりStruts2にはActionFormはありませんでした。自分の間違いを修正することが出来ました。ご指摘ありがとうございました。
mty.ad

2016/07/19 04:10

失礼しました。seasarとごっちゃになってました。taglibは上記で使えると思うので、Actionクラスのリクエストスコープ内に変数を定義しておけばJSPで認識できると思います。
settyan

2016/07/19 05:49

値がNULLになってしまうのはこちらの手違いでした。申し訳ございませんでした。 一応見れるようには南アのですが、javascript内でいじることが出来ません。html内に書くと<s:select>がコンパイルエラーになってしまいます。お手数ではありますがご回答の程よろしくお願いします。
mty.ad

2016/07/19 06:31

コンパイルエラーの場合は、文法が違うか、定義された変数がない、もしくは型が違うなど考えられますが、 訂正できる部分は致しますのでソースコード開示できませんか?
settyan

2016/07/19 06:54

本文のほうにコードを記述させていただきました。何卒よろしくお願いいたします。
A-pZ

2016/07/19 07:24

JavaScript中に書かれた<s:iterator>の値は、JavaScriptで正しく出力されますが、出力する値をシングルクォートで囲わないとJavaScriptのエラーになるかと。 <s:property value="key" /> は '<s:property value="key" />' ですね
settyan

2016/07/19 07:42

ご解答ありがとうございます。上記のコードで指摘部分を’’で囲ってみましたが、同じコンパイルエラーがでてしまいました... エラー文は以下の通りです。 「トークン "'_$tag_____________________'" に構文エラーがあります。このトークンを削除してください」
mty.ad

2016/07/19 08:10

> 一応見れるようにはなったのですが、javascript内でいじることが出来ません。 と言うのは、コンパイルエラーにならないという意味?どうしたってコンパイルエラーになります? また、 <script> var list = { <s:iterator value="ym_map"> <s:property value="key" />: [ <s:iterator value="value"> <s:property /> </s:iterator> ], </s:iterator> }; </script> を消すとコンパイルエラーは無くなりますか?
settyan

2016/07/19 08:16

一回間違えて<script>をつけずにhtml内に記述してしまいそのときは「var list = { 2015:[9, 10, 11, 12], 2016:[1, 2, 3, 4], };」と表示されたんですが、その後<script>タグをつけてやってみるとコンパイルエラーが出てしまいます。 コンパイルエラーが出ている部分が<s:iterator>の部分と],の部分なのです。
mty.ad

2016/07/19 08:49

実際その画面を表示した際のエラー文って載せれますか?
settyan

2016/07/20 00:24

上記にエラー箇所の画像を掲載させていただきました。何卒よろしくお願いいたします。
mty.ad

2016/07/20 00:45

そのエラーはIDEが出してるもので実行したら表示されたりしません? 表示されない場合、実行時のエラーが見たいです。
settyan

2016/07/20 01:34

今上記のようなまま動かしてみたのですが、今の既存のソースは問題なく動きました。 ですが、javascriptのほうは表示されず実行時のエラーも出ませんでした。
settyan

2016/07/20 01:36

色々とこんがらがってきてしまったので、一度質問を終了させ、もう一度詳しく質問を再掲載したいと思います。お付き合いいただきありがとうございました。また新しい質問のほうでもよろしくい願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問