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

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

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

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

JavaScript

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

HTML

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

Q&A

解決済

2回答

2247閲覧

ja

noririn

総合スコア37

JSP

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

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2016/07/12 12:27

編集2016/10/20 12:02

oooooooooooooooooooooooooooooooooooooooooooo

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

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

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

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

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

guest

回答2

0

onChange="selectDay(<% bean.getYear(),bean.getMonth(),bean.getDay() %>)"

の部分で、JavaScriptに対して、JSPから値を正しく出力できてないのでは。

<%= %> で値を出力するか、ELを使って個別に出力すれば実現できるでしょう。

onChange="selectDay(<%= bean.getYear() %>,<%= bean.getMonth() %>,<%= bean.getDay() %>)"

しかしJSPの式で3つ書くのはややタイヘンですね。<%= bean.getYear() %> は ${bean.year} と書けますのでELを使った書き方も検討されるのも良いでしょう。

JSP内で記載されるJavaScriptは JSPから出力された後にブラウザが実行する 前提を忘れなければ、処理順や書き方のヒントになりますね。

投稿2016/07/12 14:59

A-pZ

総合スコア12011

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

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

noririn

2016/07/12 16:00

A-pZ様 ご回答ありがとうございます。 すみません、自分の記述ミスで、元々のコードには onChange="selectDay(<%= bean.getYear() %>,<%= bean.getMonth() %>,<%= bean.getDay() %>)" と書いておりました。 まだEL式を学ぶ以前の問題のレベルなので^^;基本?をしっかりしてからEL式を学んでいきたいと思います。 >JSP内で記載されるJavaScriptは JSPから出力された後にブラウザが実行する 前提を忘れなければ、処理順や書き方のヒントになりますね。 理解力が乏しく申し訳ないです selectDay()には引数を入れてもjavascriptではyearから処理が始まっているので selectDayに引数をおさめてもyearやmonthの設定はできないという考えでいいのでしょうか・・?
A-pZ

2016/07/13 04:57

selectDayにJSPからの値が入っているようなので、もちろんJavaScriptの処理に問題ありません。d(・ω・
noririn

2016/07/13 19:15

A-pZ様 ご回答ありがとうございます。 引数で渡してもjavascriptでどうしても認識されず・・ jsp側で<%= bean.get○○() %>以外にも2015,05,12等入れてみてもjavascript側へ行ってくれませんでした。 何を間違っているのか調査中ですが、大まかなやり方は合っていると信じて頑張ります。 本当にありがとうございました。
A-pZ

2016/07/14 01:17

selectDay(<% bean.getYear(),bean.getMonth(),bean.getDay() %>) は引数3つを指定していますが、JavaScriot側のコードでは、function selectDay() になっています。 selectYear(<% bean.getYear(),bean.getMonth(),bean.getDay() %>) が正しいでしょうか。
guest

0

ベストアンサー

JSPはよくわかりませんが、JavaScript部分が動かない書き方だったので、書き直してみました。
下記の2012のところを var inputyear = <%= bean.getYear() %>; みたいにすれば望まれる挙動になるのではないかと思います。

動くサンプル:https://jsfiddle.net/hyun6d02/

HTML

1<form method="post" action="servlet" name="form" id="form"> 2 <select name="year" id="year" onChange="selectMonth()"></select>年 3 <select name="month" id="month" onChange="selectDay()" ></select>月 4 <select name="day" id="day"></select>日 5</form>

JavaScript

1window.onload = function() { 2 var inputyear = 2012; // <%= bean.getYear() %> 3 var inputmonth = 7; // <%= bean.getMonth() %> 4 var inputday = 8; // <%= bean.getDay() %> 5 selectYear( inputyear, inputmonth, inputday ); 6}; 7function filter_int( num, sub ) { 8 num = parseInt( num, 10 ); 9 return ( !isNaN( num ) ) ? num : ( ( sub ) ? filter_int( sub ) : null ); 10} 11function selectYear( inputyear, inputmonth, inputday ) { 12 inputyear = filter_int( inputyear ); 13 inputmonth = filter_int( inputmonth, document.getElementById( 'month' ).value ); 14 inputday = filter_int( inputday, document.getElementById( 'day' ).value ); 15 16 //今年を取得 17 var nowYear = ( new Date() ).getFullYear(); 18 19 //yearオブジェクトの取得 20 var objY = document.getElementById( 'year' ); 21 22 //年を表示(今年からマイナス10年前まで) 23 for ( var i = 0; i <= 10 ; i++ ) { 24 objY.options[ i ] = new Option( nowYear - i, nowYear - i, ( nowYear - i === inputyear ) ); 25 } 26 27 selectMonth( inputmonth, inputday ); 28} 29 30function selectMonth( inputmonth, inputday ) { 31 inputmonth = filter_int( inputmonth, document.getElementById( 'month' ).value ); 32 inputday = filter_int( inputday, document.getElementById( 'day' ).value ); 33 34 //monthオブジェクトを取得 35 var objM = document.getElementById( 'month' ); 36 37 //monthオブジェクトに月optionを追加 38 for ( var i = 0; i <= 11; i++ ) { 39 objM.options[ i ] = new Option( i + 1, i + 1, ( i + 1 === inputmonth ) ); 40 } 41 42 selectDay( inputday ); 43} 44 45//日の要素を作成 46function selectDay( inputday ) { 47 inputday = filter_int( inputday, document.getElementById( 'day' ).value ); 48 49 //年と月を取得 50 var sYear = filter_int( document.getElementById( 'year' ).value ); 51 var sMonth = filter_int( document.getElementById( 'month' ).value ); 52 53 //月の最終日:閏年用 54 var last; 55 56 //閏年判定 57 if ( 2 == sMonth && ( sYear % 400 === 0 || ( sYear % 4 === 0 && sYear % 100 !== 0 ) ) ) { 58 last = 29; 59 } else { 60 last = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ][ sMonth - 1 ]; 61 } 62 63 //要素の初期化 64 var objD = document.getElementById( 'day' ); 65 objD.length = 0; 66 67 //選択した月に応じた日の要素を追加 68 for ( var i = 0; i <last; i++ ) { 69 objD.options[ i ] = new Option( i + 1, i + 1, ( i + 1 === inputday ) ); 70 } 71}

投稿2016/07/13 06:59

編集2016/07/14 02:14
kei344

総合スコア69398

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

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

noririn

2016/07/13 20:06

kei344様 ご回答ありがとうございます。 またコードまで書いて頂き大変恐縮です。 いろいろとまだ分かっていないことが多く、知識を増やしていけたらと思っております。 kei344様のコードの中で !isNaN( num ) ) ? num : ( ( sub ) ? filter_int( sub ) : null こちらはどういった処理になるのでしょうか・・?ajaxというものでしょうか・・? isNaN() 関数は引数が NaN (非数)かどうかを判定します、ということは調べたのですが初めて見る書き方で、「?」がどういう意味なのかも分からず^^; ご質問ばかりで申し訳ありません。 ご教示頂けたら幸いです。
kei344

2016/07/14 02:28 編集

書きミスしていたので修正しました。 × parseInt( num, 0 ); ○ parseInt( num, 10 ); コメントも無く変わった書き方をしてしまい申し訳ないです。 filter_int関数は ・入力値を数値にする ・引数1が数値でないとき、引数2にfilter_int関数を適用する ・引数2も数値でないとき、nullを返す という処理になります。 parseIntはNaNか数値を返すため、 # if ( !isNaN( num ) ) { // 数値のとき # return num; # } else { // NaN(数値じゃない)とき # if ( sub ) { // 引数2があるとき # return filter_int( sub ); // 引数2にfilter_intをかけてその結果を返す # } else { // 引数2がないとき # return null ; // 今考えたらNaNを返すほうがいい気がしてきた。 # } # } という処理を3項演算子で書いてあります。 【条件 (三項) 演算子 (?:) (JavaScript)】 https://msdn.microsoft.com/ja-jp/library/be21c7hw(v=vs.94).aspx
noririn

2016/07/18 02:12

kei344様 御礼が大変遅くなり本当に申し訳ありません!! 失礼致しました。 ご丁寧に解説をして頂き本当にありがとうございました。理解力や知識の不足を切実に実感しております。 おかげさまでjavascriptが動きました。 この度は本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問