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

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

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

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

Q&A

解決済

2回答

6270閲覧

JSPの正しい記述について 条件式

yk-211

総合スコア34

JSP

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

0グッド

0クリップ

投稿2015/06/11 00:35

編集2015/06/11 01:13

[リンク内容]
(https://teratail.com/questions/10948)
###前提・実現したいこと
こんにちは。
分からないことがありますので、質問です。
JSPを記述していて、条件式のところで分岐がうまく出来ませんので、
どなたか教えていただけないでしょうか。
deleteFlagが1のときに、OKボタン押下でDELETEが実行されると
記述したいのですが、うまく出来ておりません。
ソースを添付いたしますので、見てやってください。
よろしくお願いいたします。

###ソースコード

<c:choose> <c:when test="${processType == 'insert'}"> <input type="submit" value="OK" name="insert" /> <input type="hidden" name="processType" value="insert"> </c:when> <c:otherwise> <input type="submit" value="OK" name="update" /> <input type="hidden" name="processType" value="update"> </c:otherwise> </c:choose> <c:if test="${deleteFlag == 1}" > <input type="hidden" value="OK" name="delete" /> </c:if>

###補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

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

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

kaputaros

2015/06/11 01:05

同じ箇所についての質問だったら、乱立させずに、1つにまとめて質問したほうがいいと思います。 一から聞くより全体を見たほうが、回答してもらいやすくなると思います。 関連する質問のURLを記載しておいてください。
yk-211

2015/06/11 01:12

ご指摘いただきありがとうございます。 関連するものを追記いたします。
guest

回答2

0

ベストアンサー

どの質問に回答して良いか迷いますが、とりあえずここに。

submitは変えないで、hiddenのprocessTypeにまとめたほうが良いと思います。
このように1つのchooseにまとめてみてはどうでしょうか?

lang

1<input type="submit" value="OK" /> 2<c:choose> 3 <c:when test="${processType == 'insert'}"> 4 <input type="hidden" name="processType" value="insert" /> 5 </c:when> 6 <c:when test="${deleteFlag == '1'}"> 7 <input type="hidden" name="processType" value="delete" /> 8 </c:when> 9 <c:otherwise> 10 <input type="hidden" name="processType" value="update" /> 11 </c:otherwise> 12</c:choose>

JSTLの場合、文字列は==でもequalsとして判定してくれたと思います。


(追記)

最終的なSQLで判断するのではなく、それぞれの処理で何が起きているのかをひとつずつ切り分けてください。

この場合は、JSPが生成したHTMLをブラウザーの「ソースの表示」で見てみてください。その時点でdeleteになっているのなら、画面を表示するときのprocessType'insert'ではない(<c:when test="${processType == 'insert'}">trueにならない)可能性があります。
proctype=<c:out value="${processType}" />を処理の前に埋め込んで、内容を確認してみてください。

もうひとつ、肝心なことを確認していませんでしたが、実行環境やバージョンによって動作が変わる可能性がありますので、その辺の情報を質問10948に記載したほうが良いかも知れません。

投稿2015/06/11 01:47

編集2015/06/11 02:09
argius

総合スコア9390

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

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

yk-211

2015/06/11 01:54

ありがとうございます。 そちらでやってみたのですが、更新時も削除フラグ立てた場合も どちらもDELETE文を取ってきてしまうようです・・・ 他のところに原因があるかもしれません。
yk-211

2015/06/11 02:44

回答ありがとうございます。 proctype=<c:out value="${processType}" />を実行してみたところupdateとなっておりました。まずここが間違っているということですよね? そうなると直すべきところはどこになりますでしょうか。
argius

2015/06/11 02:57

最終的にどういう仕様なのかが分からなくなってしまいました。 私は↓のように解釈したのですが、合っていますか? ・processType == 'insert'ならdeleteFlagに関係なく、INSERT文が実行される。 ・上記以外でdeleteFlag == '1'ならDELETE文が実行される。 ・上記以外ならUPDATE文が実行される。 合っているなら、deleteFlagの値も怪しいのでc:outで確認してみてください。
argius

2015/06/11 04:30

もしかしたら、画面で後からチェックしたdeleteFlagのオンオフをJSPで参照しようとしていますか? そうだとしたら、それはできません。JavaScriptの出番です。
yk-211

2015/06/11 05:49

何度も回答ありがとうございます・・・ JAVAのところで1箇所間違いがあり、そこを直すことによって JSPが正確に分岐してくれるようになりました。 大変大変ありがとうございました。
guest

0

javaでの比較に==を使うと、プリミティブ型なら値が同じかどうかを判定することになりますが、
オブジェクト型だと、「同じインスタンスか」という比較にしかなりません。
オブジェクト型の値が同じかどうかを比較するには、equals()を使用します。

processTypeとdeleteFlagは何型として扱いたいのでしょうか?

また、想定される値がきちんと渡ってきているかの確認はしましたでしょうか?
eclipseで実行しているのであれば、debugモードを実行することもできるかと思います。
できなければ、あらゆる場所にログを追加して、値がきているかどうかを確認して、問題部分を割り出すことをお勧めします。

投稿2015/06/11 01:22

kaputaros

総合スコア1844

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

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

yk-211

2015/06/11 01:50

回答ありがとうございます。 値はきちんと渡っておりました。 オブジェクト型で扱っておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問