OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ボタンクリック-JSP判断

  • すぐに回答を!
  • 質問No.119311
  • 閲覧数2684
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

JSP+Servlet+Beanで作ってます。

画面には、テキストとボタンが配置してます。
Aボタンクリックで、テキストに何にも
値が入ってない場合は別のHTMLに移動し、
何か値が入っている場合は
テキストをクリアする処理をしたいのですが
・・・


<INPUT TYPE = "button" NAME="RTN" VALUE ="戻る"
onClick= <% if(wk.getRtn_tmp()==1){ out.print
("location='http://localhost:8080/form.html'");}
else{out.print
("location='http://localhost:8080/servlet/jyohoya.kanri_Srv'")
;} %>>

上記のように、JSPで判断させようと
しています。
Beanでrtn_tmpというプロパティを
セットしておいて、JSPのIF文で判断させようと思ったんですが・・・


<INPUT TYPE = "submit"・・・>にしておいて、Servletで
Aボタンの処理判断をしないといけないのでしょうか。
しかし、JSPのonclick以下で判断ができても
よさそうなのですが。。。指定の仕方がおかしいのかもしれません。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル10

ベストアンサー率 28% (33/117)

やっぱり私はkanayuさんが何を疑問とされてるのか、わかってないみたいです。
単純にこれだと上手く出来ないとおっしゃってるんですよね?

>Beanがテキスト入力の有無を判断した後、
>このServletでHTMLかJSPをよぶかの選択をしたかったのですが
この文章からはこれで十分なきがするんですが・・・

RequestDispatcher rDispatcher = null;
if(true){//条件分岐
rDispatcher = request.getRequestDispatcher("/sample_JSP.jsp");
rDispatcher.forward(request,response);
}else{
rDispatcher = request.getRequestDispatcher("/next.html");
rDispatcher.forward(request,response);
}

//上の式で駄目だったらelseの中に
response.sendRedirect("/next.html")

(2)のやり方は、kanayuさんのやり方と一緒だと思うので、
気にしないで下さい。
補足コメント
noname#2205

kuro_73さん、何度もすみません。

できました。

そうですよねー。
JSP読んでるんだから、そこでIF使って
条件分岐して、HTMLにも
移動できますよね。。

FIRST.htmlのボタンクリックでSample.jsp
の画面にいき、Aボタンクリックで
条件判断してるんですけど、
FIRST.html
に戻った場合、もう一度ボタンクリックすると
ページがありません、って
なっちゃうんですよねー。。

Servletでなんかしてるんですかねえ。。。
ちょっとデバッグしてみます。
ありがとうございました!!!
ほんとうに昨日から何度もすみません。

助かりっぱなしです。
投稿日時 - 2001-08-16 18:59:50
お礼コメント
noname#2205

ページが表示されないのは、
HTMLの<FORM ACTION ="Servlet/Sample.Smp_Sevlet"
METHOD = "POST">

としていて、"Servlet/Sample.Smp_Sevlet"のところを
"Sample.Smp_Sevlet"とすると直りました。

有り難うございました。
本当に勉強不足を痛感します。
kuro_73さんはどのようにServlet + JSP + Bean
を勉強されたんでしょうか。
その辺も今度、お伺いしたいです。

本当に有り難うございました。
大変感謝しております。
投稿日時 - 2001-08-16 20:23:34
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

> JSPのIF文で判断させようと思ったんですが・・・ 「思ったんですが」どうなったんでしょうね。期待通りにならないのは わかるんですが、JSP のエラーが出るんでしょうか、それとも、テキストに 値が入っているかどうかに関わらず、if のどちらかしか通らないとか。 もし、JSP のエラーが出てるんなら、%>> を %> > (間にスペースをひとつ)とか。 ...続きを読む
> JSPのIF文で判断させようと思ったんですが・・・

「思ったんですが」どうなったんでしょうね。期待通りにならないのは
わかるんですが、JSP のエラーが出るんでしょうか、それとも、テキストに
値が入っているかどうかに関わらず、if のどちらかしか通らないとか。

もし、JSP のエラーが出てるんなら、%>> を %> > (間にスペースをひとつ)とか。

wk は、session に保持しているんですよね。値を突っ込んでいるつもりで、
突っ込まれていない、とか。

<%= wk.getRtn_tmp() %> とやって、値を確かめてみるとか。

# 試してないので、全くのあてずっぽうです


ちなみに、期待している動作は JavaScript だけでも実現できますが、
そういう選択肢は駄目ですか?
補足コメント
noname#2205

回答ありがとうございます。

>> JSPのIF文で判断させようと思ったんですが・・・

>「思ったんですが」どうなったんでしょうね。
>期待通りにならないのは わかるんですが、
>JSP のエラーが出るんでしょうか、それとも、
>テキストに 値が入っているかどうかに関わらず、
>if のどちらかしか通らないとか。

すみません。投げかけておいて、中途半端ですよね。
申し訳ないです。
JSPのIF文で判断させると、エラーにはならずに
実行はするんですが、
IFでもELSEでも、どちらも
白いページに移動するだけです。

>ちなみに、期待している動作は JavaScript だけでも実
>現できますが、
>そういう選択肢は駄目ですか?

私はスクリプトについて全く知らないのですが、
この動作は実現できるのですか?
だとしたらどのようにすればできるのか
ご教授願いたいのですが。。。。
よろしくお願いします。
私のほうも、もう少し調べてみます。
投稿日時 - 2001-08-16 14:26:03
  • 回答No.2
レベル10

ベストアンサー率 28% (33/117)

>画面には、テキストとボタンが配置してます。 >Aボタンクリックで、テキストに何にも >値が入ってない場合は別のHTMLに移動し、 >何か値が入っている場合は テキストをクリアする処理をしたいのですが >上記のように、JSPで判断させようとしています。 テキストというのは、<INPUT>タグのテキストのことでしょうか? だとすると、JSPの ...続きを読む
>画面には、テキストとボタンが配置してます。
>Aボタンクリックで、テキストに何にも
>値が入ってない場合は別のHTMLに移動し、
>何か値が入っている場合は テキストをクリアする処理をしたいのですが
>上記のように、JSPで判断させようとしています。

テキストというのは、<INPUT>タグのテキストのことでしょうか?
だとすると、JSPの使用方法の認識に誤りがあります。
JSPは表示する前にコンパイルしてHTML形式に吐き出すものなので、
表示されてしまったものの現在の状態を認識したり、
変更することはできません。

テキストという意味が、wkビーンのrtn_tmpというプロパティの値の意味であるならば、
まず wk.getRtn_tmp()==1 を wk.getRtn_tmp().equals("1")
に変更する必要があります。

お書きになられてたソースでは、
wk.getRtn_tmp()==1 ならば、form.htmlに
wk.getRtn_tmp()!=1 ならば、/servlet/jyohoya.kanri_Srvサーブレットに
移動するようになっています。

移動した先が真っ白なのは、

・Servletにしか移動していない&&サーブレットにエラーがある
(エラーというよりも、動作しているものの、正しいパラメーターを受け取っていないため、誤動作していて、PrintWriterをフラッシュしていない状態)
・<INPUT>を含む<FORM>のアクション先に移動している

のどちらかだと思います。

前の方もかかれていましたが、
やりたい事が、はっきり見えません。もう少し詳しい情報をお願いします。
補足コメント
noname#2205

kuro_73さん、引き続き、有り難うございます。

>テキストというのは、<INPUT>タグのテキストのことでしょうか?
>だとすると、JSPの使用方法の認識に誤りがあります。
>JSPは表示する前にコンパイルしてHTML形式に吐き出すものなので、
>表示されてしまったものの現在の状態を認識したり、
>変更することはできません。

そうです。
流れとしては。。。

入力画面(JSPで書いている)にINPUTタグのテキストと、ボタンがあって、
(1)もし、テキストになにかを入力した状態で
ボタンを押すと同じJSPの画面を表示させるんですが、そのときは
テキストはクリアして出したいのです。
(2)もし、テキストになにも入力されていない状態で
ボタンを押したらHTMLの画面(入力画面と別の画面)に移動
させたいのです。

こんな感じで、伝わりますでしょうか。。。

>お書きになられてたソースでは、
>wk.getRtn_tmp()==1 ならば、form.htmlに
>wk.getRtn_tmp()!=1 ならば、/servlet/jyohoya.kanri_Srvサーブレットに
>移動するようになっています。

そうですね。。なんか認識不足、使用方法を間違ってる気がします。

よく分からなくなってきましたが、やりたいことを
端的に言うと、一つのボタンに、Resetの処理と移動の処理
の二つの機能を持たせたいってことだったのですが。。。
単純にボタンを二つわけたらいい、といえばいいのですが、、、
よろしくお願いします。
投稿日時 - 2001-08-16 15:21:12
お礼コメント
noname#2205

<説明、質問の補足>です。

ボタンクリックで、ブラウザからServletに
リクエストが送信されます。そして、
ServletからBeanのインスタンス作成で
Beanで処理をさせ、その後、Servletが
JSPを呼び出す・・・・という
一連の流れがありますよね。

で、ボタンクリック後、テキストに入力があったか
どうかを判断するのはBeanで処理するとして、
ServletがJSPをよぶか、HTMLを呼ぶか判断
するようにしたらいいのでしょうか??
投稿日時 - 2001-08-16 15:36:48
  • 回答No.3
レベル10

ベストアンサー率 28% (33/117)

きっと、<INPUT TYPE="text">の中身は表示の時にビーンから与えるんですね? それで、<INPUT TYPE="text">の中身があってボタンを押すと、ビーンの中身をクリアして、もう一度同じページを表示する。 <INPUT TYPE="text">の中身が空でボタンを押すと次のページにいける ...続きを読む
きっと、<INPUT TYPE="text">の中身は表示の時にビーンから与えるんですね?
それで、<INPUT TYPE="text">の中身があってボタンを押すと、ビーンの中身をクリアして、もう一度同じページを表示する。
<INPUT TYPE="text">の中身が空でボタンを押すと次のページにいける。

もしこれが正しいとすれば、注意するべきは、
「同じJSPを表示」するときにサーブレットを介するのか、JSPに直接アクセスするのかということ。
Servletを介するのであれば、Servletの中でBeanの中身をクリアすればいいんですが、直接JSPの場合は、JSPの中で、Beanの中身をクリアしなければなりません。
JSPは、自分がはじめて呼ばれたのか、二回目に呼ばれたのかを判断するプログラムが必要となります。

やりたいことは、こんな感じでできると思います。
ただし、今手元にJavaScriptのリファレンスがないので、
if(txt.trim()=='')
この部分はあやしいです。
trim()もあるかどうかわからないし、== ではなく、equalsかも・・

<form name=a>
<input type="hidden" name="beanClear">
<input type="text" name="txt1">
<input type="button" onClick="check()">
</form>

<SCRIPT LANGUAGE="javascript">
<!--
function check(){
var txt = document.a.txt1.value;
//FORM a の txt1の値がブランクならば次のHTMLへ
if(txt.trim()==''){
document.a.action = "/html/next.html";
}else{
// trueならば受け取ったJSPかServleでBeanの中身をクリアする
document.a.beanClear.value= "true";
document.a.action = "/html/this.jsp";
}
document.a.submit();
}
-->
</SCRIPT>
補足コメント
noname#2205

>きっと、<INPUT TYPE="text">の中身は表示の時に
>ビーンから与えるんですね?

はい。そうなんです。
<INPUT TYPE = "text" NAME = "cd" size = "15" MAXLENGTH=2
value= "<jsp:getProperty name="wk" property="cd_text" />">

こんな感じです。

>それで、<INPUT TYPE="text">の中身があってボタンを押すと、
>ビーンの中身をクリアして、もう一度同じページを表示する。
><INPUT TYPE="text">の中身が空でボタンを押すと次のページにいける。

そうなんです。説明が足りなくてすみませんでした。
そういうことが言いたかったんです。質問が伝わりませんよね。
ほんと、すみません。

>注意するべきは、「同じJSPを表示」するときにサーブレットを介するのか、
>JSPに直接アクセスするのかということ。
>Servletを介するのであれば、Servletの中でBeanの中身をクリアすればいいんですが、
>直接JSPの場合は、JSPの中で、Beanの中身をクリアしなければなりません。
>JSPは、自分がはじめて呼ばれたのか、二回目に呼ばれたのかを判断するプログラムが
>必要となります。


えーと。。
私がやってたのは、JSPでボタンを以下のように作ります。
<INPUT TYPE = "submit" NAME="RTN" VALUE ="RTN">

そして、ServletがBeanのインスタンスを作成し、
Beanの中でテキストの入力有無を判断し、テキスト入力合った場合
同じJSPを表示しますのでSetメソッドを使って
テキストをクリアし、セットします。

これは実行されるのですが、
テキスト入力がなかった場合は次のページに移動したいのに
その動作ができません。

それは、ServlvetのdoPostメソッドで最後にJSPを呼び出す処理
があるからです。そのへんの処理を作りたいのですが。。。
Servletで次のHTMLに移動することはできますか?

それとも、kuro_73さんが書かれたような
スクリプトじゃないと難しいのでしょうか。。?
投稿日時 - 2001-08-16 16:19:05
  • 回答No.4
レベル10

ベストアンサー率 28% (33/117)

>それは、ServlvetのdoPostメソッドで最後にJSPを呼び出す処理 >があるからです。そのへんの処理を作りたいのですが。。。 >Servletで次のHTMLに移動することはできますか? やりたいことが大分分かってきました。 二回目の返答を見る前に書いてしまったので、ちょっと的外れなことを書いてしまいました。すみません。 Servletで、別のHTMLを表 ...続きを読む
>それは、ServlvetのdoPostメソッドで最後にJSPを呼び出す処理
>があるからです。そのへんの処理を作りたいのですが。。。
>Servletで次のHTMLに移動することはできますか?

やりたいことが大分分かってきました。
二回目の返答を見る前に書いてしまったので、ちょっと的外れなことを書いてしまいました。すみません。

Servletで、別のHTMLを表示するのは可能ですよ。
場合わけの部分はお任せするとして、
JSPをコールするやり方は、お使いのサーブレットによって異なると思いますが、

一般的な方法を二つ提案するとすると
(1)response.sendRedirect("/html/next.html");
ちなみにsendRedirectはサーブレットに対してもJSPに対しても可能です。

(2)RequestDispatcher dispatch = this.getServletContext().getNamedDispatcher("フォワードする先のサーブレット");
if (dispatch == null)throw new ServletException("サーブレット[" + forwardServlet + "]が定義されていません");
dispatch.forward(request.getRequest(), response);

こんなんでいかがでしょうか。
補足コメント
noname#2205

kuro_73さん、回答有り難うございます。

>Servletで、別のHTMLを表示するのは可能ですよ。
>場合わけの部分はお任せするとして、
>JSPをコールするやり方は、お使いの
>サーブレットによって異なると思いますが、


今、私がServletのdoPostメソッド内でやっている
処理は

(1)//Bean(wk_Bean)のインスタンス作成
wk = new wk_Bean();

(2)//各パラメータ値取得
kcd = request.getParameter("cd");



(こんな感じでそれぞれ取得)

(3)//wk_Bean処理実行する(DB接続等)
wk.Work(rValue,kcd,knm,btn,flg_fst);

(4)//BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット
request.setAttribute("wk",wk) ;

(5)//ViewであるJSPを呼び出す
RequestDispatcher rDispatcher =
request.getRequestDispatcher("/sample_JSP.jsp");
rDispatcher.forward(request,response);

こんな感じなんですが。。。
私の理解としては、(5)でJSPを呼びだしてるので
この部分で他のHTMLを呼べないかなと思ったのです。

うーん。Beanがテキスト入力の有無を判断した後、
このServletでHTMLかJSPをよぶか
の選択をしたかったのですが、kuro_73さんの書かれた

(2)RequestDispatcher dispatch = this.getServletContext().getNamedDispatcher("フォワードする先のサーブレット");
if (dispatch == null)throw new ServletException("サーブレット[" + forwardServlet + "]が定義されていません");
dispatch.forward(request.getRequest(), response);

というプログラムの意味がよく理解できてないのですが
これは、。。。フォワードするServletだけを
書いておいたらいいのですか?
よろしくお願いします。
投稿日時 - 2001-08-16 17:43:55
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ