• ベストアンサー

ボタンクリック-JSP判断

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以下で判断ができても よさそうなのですが。。。指定の仕方がおかしいのかもしれません。

noname#2205
noname#2205
  • Java
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.5

やっぱり私は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
質問者

お礼

ページが表示されないのは、 HTMLの<FORM ACTION ="Servlet/Sample.Smp_Sevlet" METHOD = "POST"> としていて、"Servlet/Sample.Smp_Sevlet"のところを "Sample.Smp_Sevlet"とすると直りました。 有り難うございました。 本当に勉強不足を痛感します。 kuro_73さんはどのようにServlet + JSP + Bean を勉強されたんでしょうか。 その辺も今度、お伺いしたいです。 本当に有り難うございました。 大変感謝しております。

noname#2205
質問者

補足

kuro_73さん、何度もすみません。 できました。 そうですよねー。 JSP読んでるんだから、そこでIF使って 条件分岐して、HTMLにも 移動できますよね。。 FIRST.htmlのボタンクリックでSample.jsp の画面にいき、Aボタンクリックで 条件判断してるんですけど、 FIRST.html に戻った場合、もう一度ボタンクリックすると ページがありません、って なっちゃうんですよねー。。 Servletでなんかしてるんですかねえ。。。 ちょっとデバッグしてみます。 ありがとうございました!!! ほんとうに昨日から何度もすみません。 助かりっぱなしです。

その他の回答 (4)

  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.4

>それは、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だけを 書いておいたらいいのですか? よろしくお願いします。

  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.3

きっと、<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さんが書かれたような スクリプトじゃないと難しいのでしょうか。。?

  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.2

>画面には、テキストとボタンが配置してます。 >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
質問者

お礼

<説明、質問の補足>です。 ボタンクリックで、ブラウザからServletに リクエストが送信されます。そして、 ServletからBeanのインスタンス作成で Beanで処理をさせ、その後、Servletが JSPを呼び出す・・・・という 一連の流れがありますよね。 で、ボタンクリック後、テキストに入力があったか どうかを判断するのはBeanで処理するとして、 ServletがJSPをよぶか、HTMLを呼ぶか判断 するようにしたらいいのでしょうか??

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の処理と移動の処理 の二つの機能を持たせたいってことだったのですが。。。 単純にボタンを二つわけたらいい、といえばいいのですが、、、 よろしくお願いします。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> JSPのIF文で判断させようと思ったんですが・・・ 「思ったんですが」どうなったんでしょうね。期待通りにならないのは わかるんですが、JSP のエラーが出るんでしょうか、それとも、テキストに 値が入っているかどうかに関わらず、if のどちらかしか通らないとか。 もし、JSP のエラーが出てるんなら、%>> を %> > (間にスペースをひとつ)とか。 wk は、session に保持しているんですよね。値を突っ込んでいるつもりで、 突っ込まれていない、とか。 <%= wk.getRtn_tmp() %> とやって、値を確かめてみるとか。 # 試してないので、全くのあてずっぽうです ちなみに、期待している動作は JavaScript だけでも実現できますが、 そういう選択肢は駄目ですか?

noname#2205
質問者

補足

回答ありがとうございます。 >> JSPのIF文で判断させようと思ったんですが・・・ >「思ったんですが」どうなったんでしょうね。 >期待通りにならないのは わかるんですが、 >JSP のエラーが出るんでしょうか、それとも、 >テキストに 値が入っているかどうかに関わらず、 >if のどちらかしか通らないとか。 すみません。投げかけておいて、中途半端ですよね。 申し訳ないです。 JSPのIF文で判断させると、エラーにはならずに 実行はするんですが、 IFでもELSEでも、どちらも 白いページに移動するだけです。 >ちなみに、期待している動作は JavaScript だけでも実 >現できますが、 >そういう選択肢は駄目ですか? 私はスクリプトについて全く知らないのですが、 この動作は実現できるのですか? だとしたらどのようにすればできるのか ご教授願いたいのですが。。。。 よろしくお願いします。 私のほうも、もう少し調べてみます。

関連するQ&A

  • JSP + ラジオボタン

    JSP+Servlet+Beanで作ってます。 JBuilder5を使ってます。 JSPはラジオボタン、テキスト、ボタン等があります。 <INPUT TYPE = "radio" NAME = "r1" VALUE = "ins">A <INPUT TYPE = "radio" NAME = "r1" VALUE = "upd">B <INPUT TYPE = "radio" NAME = "r1" VALUE = "del">C としています。 たとえば、Bを選択時、ボタンクリックで Servletにリクエストを送信しますが、 Servletから再びJSPを呼び出し、画面を 表示するとき、ラジオボタンはBを選択 させたいのですが、どうしたらいいですか? FormタグのCHECKEDというオプションを どのように使えばいいのか教えていただきたいのですが。 テキストには、Beanでsetメソッド、 JSPでは、<jsp:getProperty・・・>を使って セットできているんですが、ラジオボタンも 同様ですか? @@@・・・JSPのタグを勉強しないといけないです。 @@@勉強不足です。

    • ベストアンサー
    • Java
  • JSP+Servletで終了ボタン

    JSPで、終了ボタンをクリックしたときに、 ブラウザを閉じる、といった処理は <INPUT TYPE = "submit" NAME="EXT" VALUE ="終了" onclick ="window.close();"> などでできるとあったのですが、 終了ボタンで、ページ(JSPではなく、 HTML)を移動する場合、onclick=以下に HTMLのアドレスを書いたらいいのでしょうか? やってはみたのですが、うまくいきませんでした。 うまくいかないというのは、 そのままServletにリクエストがわたるようで、 表示ページから何も移動しないということです。 また、<a href = "・・・></a>という リンクのタグもやってみましたが、 ランタイムエラーがでてしまいました。 何か外しているようでしたら、教えていただきたい のですが。。。。

    • ベストアンサー
    • Java
  • 携帯 JAVA JSP 画面遷移

    携帯のWebアプリを作成しており、ボタンごとに画面遷移させる方法を考えています。 以下はPC用に作成したJSP <script Language="JavaScript"> <!-- function inOut(flg){ if(flg){ lert("あ"); location.href='top.jsp'; }else{ alert("い"); location.href='top2.jsp'; } } // --> </script> <html> <head> <title>テスト</title> </head> <body> <form method="POST" action="top3.jsp"> <input type="button" name="in" onClick="inOut(true);" value="あ" /> <input type="button" name="out" onClick="inOut(false);" value="い" /> <input type="submit" name="back" value="う" /> </form> </html> 現状の問題点は2点あり、 1.携帯はJavaScriptが使用できない 2.<input type="button"~ とするとテキストボックスのような見栄え・機能になってしまう。 携帯Webアプリの場合、ボタンごとの画面遷移はどのように行えばよいのでしょうか?

  • jsp から servlet に

    パラメータをJSPからServlet に渡す所で、どうしても、null になってしまします‥。 主要な部分だけ書きます。 --jsp-- <jsp:useBean id="beanId" class="Bean" scope="request" /> <form method="POST" action="servlet"> <input type="submit" value="送信"> <input type="text" size="10" name="name"> --servlet-- import Bean; Bean bean = (Bean)request.getAttribute( "beanId" ); // ↑ここが、nullになってしまう。 --Bean-- public String getName() { return name; } public void setName( String name ) { this.name = name; } 考え方が違ってるかも知れないのですが‥。 よろしくお願いします。

    • ベストアンサー
    • Java
  • jspでファイルを読み込む

    jspでajaxを使ってファイルを読み込む処理がうまくいきません。 直接jspのページを見る場合、jspのアドレスが http://localhost:8080/xxx/sample.jsp となり処理もうまくいくのですが、javaのクラスファイル→sample.jspのようにサーブレットから値を受け取る場合にアドレスが http://localhost:8080/xxx/servlet/クラスファイル名?変数名=値 となり、この場合ファイルを読み込む処理がうまくいきません。 【ソースの一部】 function loadText(filename){ new Ajax.Updater( { success: "disp"}, filename, { method: 'get', onFailure: displayError} ); } <input type="button" value="ファイル読み込み" onClick="loadText('readfile.txt')"> <div id="disp"></div> readfile.txtのパスの書き方が悪いのかと思いいろいろ試しましたができませんでした。 アドバイスお願いします。

    • ベストアンサー
    • Java
  • jsp,servlet,beanの流れについて

    初歩の初歩の質問ですが、参考書等読んでいて混乱してしまっています。宜しくお願いします。 a.jsp(入力画面) a_servlet.java a_bean.java(setのみ) b.jsp(表示画面) b_servlet.java b_bean.java(get,setのみ) というファイルがある時のプログラムの流れは、 (1)a.jsp・・・画面を表示する。データを入力する。登録ボタンを押下する。 (2)a_servlet.java・・・(1)で登録ボタンを押下されたら、a.jspのデータを取得。a_bean.javaへ設定する。b.jspへ飛ぶ。 (3)a_bean.java・・・(2)によりデータが設定されている。 (4)b_servlet.java・・・a_bean.javaのデータを取得し、b_bean.javaに設定する。 (5)b_bean.java・・・(4)によりデータが設定されている。 (6)b.jsp・・・表示データをb_bean.javaより取得後、画面を表示する。削除ボタンを押下する。 (7)b_servlet.java・・・(6)で削除ボタンが押下されたらb.jspのデータを取得し、b_bean.javaへ設定する。 特にbファイルの処理順序で混乱しています。 上記のような流れで考え方は合っているでしょうか。 少々分かりずらいかもしれませんが、間違っていたら小学生でも分かるように教えてください。

    • ベストアンサー
    • Java
  • HPボタンの長さが異なる。

    下のボタンが マックの「IE4.5」「IE5.0」「ネスケ4.7」だとちゃんと奇麗に中央に表示されますが、 Windows「IE4.5」「IE5.0」はボタンの長さが異なり ガタガタになります。 windowsでも奇麗に並べるにはどうしたらいいのでしょうか? よろしくご指導お願いいたします。 テストでアップしてあるURLですのでご確認してください。 http://watn.jp/test/ <HTML> <HEAD> <TITLE>++++</TITLE> </HEAD> <!------------------- 中身-------------------> <center> 下のボタンがマックの「IE4.5」「IE5.0」「ネスケ4.7」だと<br> ちゃんと中央に表示されますが、Windows「IE4.5」「IE5.0」は<br> ボタンの長さが異なりガタガタになります。 <FORM> <INPUT TYPE="button" VALUE=" ●●・・◇◇◇   " onClick="window.location.href='kituke.html'"><br> <INPUT TYPE="button" VALUE="   ・・◇◇◇◇  " onClick="window.location.href='sadou.html'"><br> <INPUT TYPE="button" VALUE="   ・・◇◇◇◇◇ " onClick="window.location.href='buyou.html'"><br> <INPUT TYPE="button" VALUE=" ●●・・◇◇◇   " onClick="window.location.href='ivent.html'"><br> <INPUT TYPE="button" VALUE="   ・・◇◇◇◇  " onClick="window.location.href='tenjikai.html'"><br> <INPUT TYPE="button" VALUE=" ◇◇◇       " onClick="window.location.href='butai.html'"><br> <INPUT TYPE="button" VALUE=" ◇◇◇◇      " onClick="window.location.href='honten.html'"><br> <INPUT TYPE="button" VALUE=" ◇◇◇◇◇     " onClick="window.location.href='yono.html'"><br> </FORM> </center> </BODY> </HTML>

  • ボタンをクリックして、リンクを開きたい

    ボタンをクリックして、リンクを開きたいのですが <input type="button" value="yahooを表示する" onClick="location=http://www.yahoo.co.jp/"> をしても何も起りません。 出来れば、新しいブラウザで開きたくて、 <A href="http://www.yahoo.co.jp/" target="HOGE">yahooを表示する</a> と同じように、ボタンをクリックして開きたいので、ご教授お願いします。

    • ベストアンサー
    • HTML
  • ボタンの長さを変えたい(至急)

    <INPUT TYPE=BUTTON VALUE="最新100回グラフ" onClick="location.href='../grf/100.htm'"> <INPUT TYPE=BUTTON VALUE="最新50回グラフ" onClick="location.href='../grf/50.htm'"> このようなボタンの長さを揃えたいです。 スペースで調節するしかないのでしょうか?

    • ベストアンサー
    • HTML
  • JSPで使用不可

    JSPで表示しているテキストやボタンを (FORM INPUT TYPE のテキストもしくは Submitボタン) 使用不可にすることは可能でしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう