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

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

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

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

Java

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

JavaScript

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

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

Q&A

解決済

3回答

1976閲覧

Jsp・サーブレット等について質問の回答、アドバイスをください!

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

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

Java

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

JavaScript

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

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

0グッド

0クリップ

投稿2018/07/12 15:44

前提・実現したいこと

 今Jspやサーブレットを中心に勉強を兼ねた開発を行ってるのですがわからないことばかりでどうか皆様のお力を借りたいなと思っております。(少し内容とかけ離れてるかもしれないのでそこはご了承ください)
今回質問したいことは、
①ボタン操作について、htmlで作成したinputタグの2つボタン(下記)をJavaの方でそれぞれ異なる動作をさせたいのですがどのようにしたらいいですか?
今はJavascriptではfunction関数でサブミットさせてるだけです。
更新なら画面遷移させる。
キャンセルなら画面遷移と何か…みたいな。
<input type="hidden" name="action" id="click">
(中略)

<div id="button"> <input class="cancel" type="button" value="キャンセル" onclick="cancel()"> <input class="update" type="button" value="更新" onclick="update()"> </div **②サーブレットの方でfor文のスコープ内で作った値の入った変数をスコープ外でも使用したいのですが、もちろんふつうできないことはわかっているのですが、何かそれに似たような工夫を教えてください。** 間違いがあればそれも教えてください。 int saleFormCol = Integer.parseInt(request.getParameter("length")); String productCode = request.getParameter("productCode"); String salePrice = request.getParameter("unitPrice"); String saleNum = request.getParameter("num"); String saleTotal = request.getParameter("total"); String saleTax = request.getParameter("tax");
int length = Integer.parseInt(request.getParameter("length")); for(int i = 0; i < length; i++) { saleFormCol = Integer.parseInt(request.getParameter("length")); productCode = request.getParameter("productCode" + i); salePrice = request.getParameter("unitPrice" + i); saleNum = request.getParameter("num" + i); saleTotal = request.getParameter("total" + i); saleTax = request.getParameter("tax" + i); }

この後switch文でrequest.getParameterで取得したカテゴリーごとに異なる動作を行います。

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

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

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

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

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

euledge

2018/07/12 15:56

for文のスコープ内の変数というのは具体的にはどれを指しますか? saleFormCol などはスコープの外で宣言してるのでfor文の外でも見れますよ。ただ、for文のループに対して同じ変数を上書きしてるので配列などにしてあげないと最後の値しか取れませんよ
euledge

2018/07/12 16:00

buttonのonClickでSubmitしようとしているのならonClickの中の処理で遷移先を変えてサーバーを呼んであげればよいと思いますよ
退会済みユーザー

退会済みユーザー

2018/07/12 16:25

最初のレスについてですが、たとえて言うならiが0,1の時の2つの値をとるではなくて、最後の1だったときの値しかとらないって感じですか?
退会済みユーザー

退会済みユーザー

2018/07/12 16:26

その方法を簡単にでいいので書いていただいてもいいですか?
guest

回答3

0

①ボタン操作について、htmlで作成したinputタグの2つボタン(下記)をJavaの方でそれぞれ異なる動作をさせたいのですがどのようにしたらいいですか?

  1. Javascriptのcancel(), update()の中でformのactionを変更してからsubmitする(それぞれ、別のservletを準備しておく)
  2. Hanbe.T様の回答のように、「どのボタンがクリックされたか」という情報もservletにPOSTして、servlet側で処理を判定する(その値をhiddenに持たせてPOSTするでもいいですね)

②サーブレットの方でfor文のスコープ内で作った値の入った変数をスコープ外でも使用したいのですが、もちろんふつうできないことはわかっているのですが、何かそれに似たような工夫を教えてください。

productCodesalePriceを配列で定義し、ループ内で取得した値を保持する方法はいかがでしょうか。
少し複雑になるかもしれませんが、productCodesalePriceを定義したJavaBeans(別クラス)を作成し、そのクラスのArrayListを利用する方法が良さそうですね。

Java

1/** 2 * 製品情報クラス 3 */ 4public class Product { 5 6 private String productCode; 7 private String salePrice; 8 9 // 以下、他のメンバ変数とアクセサ(getter/setter)を定義 10} 11

Java

1 2// 保持用のArrayList生成 3List<Product> productList = new ArrayList<Product>(); 4 5for(int i = 0; i < length; i++) { 6 7 // requestの値をProductクラスのインスタンスにセット 8 Product product = new Product(); 9 product.setProductCode(request.getParameter("productCode" + i)); 10 product.SalePrice(request.getParameter("unitPrice" + i)); 11 product.SaleNum(request.getParameter("num" + i)); 12 product.SaleTotal(request.getParameter("total" + i)); 13 product.SaleTax(request.getParameter("tax" + i)); 14 15 // ArrayListに保持 16 productList.add(product); 17} 18 19 20// 以下で productListを利用 21

投稿2018/07/13 00:30

takyafumin

総合スコア2335

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

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

0

ベストアンサー

質問レス

ただ、for文のループに対して同じ変数を上書きしてるので配列などにしてあげないと最後の値しか取れませんよ

についてですが、

java

1// length が "3"で 2// productCode= "P",productCode0= "P0", 3// productCode1= "P1", productCode2= "P2" 4// であった場合 5String productCode = request.getParameter("productCode"); 6// productCode = "P" になりますね 7int length = Integer.parseInt(request.getParameter("length")); length = 5 8for(int i = 0; i < length; i++) { 9 productCode = request.getParameter("productCode" + i); 10 // i = 0のとき productCode="P0" 11 // i = 1のとき productCode="P1" 12 // i = 2のとき productCode="P2" 13} 14System.out.println("productCode:" + productCode);

ループ抜けた後には productCode="P2" になってしまいますよね。
ループの途中の "P0"や"P1"はループ抜けた後には使うことは出来ませんよという意図のコメントです。

この後switch文でrequest.getParameterで取得したカテゴリーごとに異なる動作を行います。

の「この後」というのがループの中であるならば理解できます。

投稿2018/07/12 23:50

euledge

総合スコア2404

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

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

0

②に関しては、解答を持ち合わせていないため、①のみ解答いたします。
※送信対象にボタンが含まれていることが前提です。

HTML

1<input name="submit" class="cancel" type="button" value="キャンセル" onclick="cancel()"> 2<input name="submit" class="update" type="button" value="更新" onclick="update()">

Java

1String button = request.getParameter("submit"); 2if ("キャンセル".equals(button)) { 3 // キャンセル時の処理 4} else if ("更新".equals(button)) { 5 // 更新時の処理 6}

input要素ですと、ボタンに表示される値とsubmit時に送信される値が一緒になるため、button要素を使用することをお勧めします。
表示される値が日本語の場合、以下のようなことを考慮しないといけない。

  • 判定の条件が日本語になってしまう。(好みの問題)
  • 文字コードを考える必要がある(Java側でのエンコードの話)。

投稿2018/07/12 22:02

編集2018/07/13 13:42
Hanbe.T

総合スコア36

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

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

退会済みユーザー

退会済みユーザー

2018/07/13 00:56

箇条書きの部分、少し解説をしていただいてもいいですか?
Hanbe.T

2018/07/13 14:09

そこまで深い意味があったわけではないのですが、 >・判定の条件が日本語になってしまう。(好みの問題) 判定の条件が、input要素のvalue属性値になってしまうということです。 それでも問題ないとは思いますので、あくまで好みの問題かと思っています。 >・文字コードを考える必要がある(Java側でのエンコードの話)。 HTML側の文字コードがUTF-8で、APサーバ側の文字コードがEUC-JPとかになっていた場合に文字化けが発生するので、Java側で明示的に文字コードを設定する必要がある。 入力内容に日本語がない画面の場合に、文字コードを意識した実装をしなければならない。 こちらはそもそも論として、文字コードの設定がずれているのが問題ですが。
退会済みユーザー

退会済みユーザー

2018/07/15 04:45

解説ありがとうございます!
退会済みユーザー

退会済みユーザー

2018/07/17 01:17

すいません。そこそこ日が空いたのにまた解説をお願いしてほしいのですが、 ボタン要素、おそらくボタンタグを使用すると思うのですがそれを使用するときは上記のコードが特にJavaの部分が大きく変わったりしますか?あとその時のJavascriptコードも変わったりしますか? もしよろしければ上記のような例文をまた作っていただきたいです。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問