アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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さんのやり方と一緒だと思うので、
気にしないで下さい。

この回答への補足

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

できました。

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

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

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

助かりっぱなしです。

補足日時:2001/08/16 18:59
    • good
    • 0
この回答へのお礼

ページが表示されないのは、
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

>それは、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);

こんなんでいかがでしょうか。

この回答への補足

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
    • good
    • 0

きっと、<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>

この回答への補足

>きっと、<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
    • good
    • 0

>画面には、テキストとボタンが配置してます。


>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>のアクション先に移動している

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

前の方もかかれていましたが、
やりたい事が、はっきり見えません。もう少し詳しい情報をお願いします。

この回答への補足

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
    • good
    • 0
この回答へのお礼

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

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

で、ボタンクリック後、テキストに入力があったか
どうかを判断するのはBeanで処理するとして、
ServletがJSPをよぶか、HTMLを呼ぶか判断
するようにしたらいいのでしょうか??

お礼日時:2001/08/16 15:36

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



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

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

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

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

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


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

この回答への補足

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

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

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

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

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

私はスクリプトについて全く知らないのですが、
この動作は実現できるのですか?
だとしたらどのようにすればできるのか
ご教授願いたいのですが。。。。
よろしくお願いします。
私のほうも、もう少し調べてみます。

補足日時:2001/08/16 14:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!