urizakaです。
現在J-BUilderを使ってテキストボックスに入力された内容をDBに送るという
JSPの画面を作っているのですが、そこでテキストボックスでEnterキーを押すと
勝手にサーブレットに遷移されるというエラーが発生してしまいます。最初は、
<Form name="Insert" Method="POST" Action="…">
(…にはサーブレットのアドレスが入ります)
と設定しているので、それでActionに登録されたサーブレットに遷移してしまう
のだと思い、ActionをJSP上のボタンが押された時に設定されるようにしたのですが、そうするとそのページが表示される前に実行されるサーブレットに移動してしまいます。もしかすると、HTMLの設定の問題なのかもしれませんが、すみませんが
この件についてご存知の方がいらっしゃいましたら教えてください。
 宜しくお願いします。

A 回答 (1件)

urizakaさん、こんにちは。


 かかれている内容を見る限り、HTMLのフォームの問題ですね。jspで生成されるhtmlソースを、拡張子htmlで保存してそのhtmlファイルをブラウズしていただければ、jspの問題ではないとおわかりいただけると思います。
 テキストフィールドでEnterを押すと、submitしてしまうのは、インターネットエクスプローラだけでなく、ネットスケープ4.7、6でも起きてしまうようですね。

 解決方法の1つとして、JavaScript(Javaではないです)を利用することを提案します。
 前置きとしてJavaScriptが有効なブラウザで、「ボタンを押す」、「submitしようとする」など何かしら動作するとイベントが発生します。イベントが発生したとき、そのフォーム部品に適切なイベントハンドラが設定されていると、そのイベントハンドラの内容が実行されます。といっても、JavaScriptをご存知ない場合、わかりませんね。
 formからsubmitするとき、onsubmitハンドラが実行されます。このハンドラからfalseが戻されるとsubmitされず、画面も遷移しません。また、ボタンが押されるとonclickハンドラが実行されます。
 以上を踏まえて、方針を。
まず変数を用意します。この変数の初期値はfalseとします。submitボタンが押されたら、その変数の値をtrueに変更します。フォームのonsubmitハンドラでその変数の値を戻します。
こうすることで、submitボタンが押された場合は、変数の値がtrueなのでsubmitされます。
一方、テキストフィールドでEnterが押された場合、変数の値がfalseのままなので、submitされず、画面遷移されません。

サンプルとして、以下に記します。後はurizakaさんが作成するシステムにあわせてカスタマイズできるようがんばってください。

<html>
<body>
<script laguage="javascript">
var submitIsOk = false ;
</script>
<form action="XXX" onsubmit="return submitIsOk">
<input type="text" size="20" />
<input type="submit" value="submitする" onclick="submitIsOk=true" />
</form>
</body>
</html>
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJSPからパラメータを取得してサーブレットに遷移する際文字化けしてしまいます。

オールインワンEclipse3.4
tomcat5.5
上記の環境で、サーブレットの参考書に沿ってサンプルを作成していたのですが、パラメータボックスに日本語を入力すると文字化けしてしまい、ブラウザに日本語で表示することができません。
英文字では問題なく表示できるので、エンコード・デコードのどこかで間違っているのだと思うのですが、参考書に書いてあることを試しましても、うまくいきません。
どなたかご指導お願いいたします。
----------
echo.jsp
----------
<%@page contentType="text/html; charset=Windows-31J"       pageEncoding="Windows-31J"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<body>

<h2>EchoServletの入力</h2>

<form action = "/basic2/EchoServlet2">
<input type="text" name="message">
<input type="submit" value="表示" >
</form>
</body>
</html>
---------------------
EchoEchoServlet2.java
---------------------
package input;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EchoServlet2 extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{

request.setCharacterEncoding("Windows-31J");
String msg = request.getParameter("message");
System.out.println("msg =" + msg);//確認用

//response.setContentType("text/plain; charset=Windows-31J");

PrintWriter out = response.getWriter();
System.out.println("out = " + out);//確認用
out.println("message=" + msg);
}
}
--------------------------------
tomcatの保存されているserver.xml
--------------------------------
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8000"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
useBodyEncodingForURI="true"←ボディのエンコードを使う指定を追加しました
/>


よろしくお願いいたします。

オールインワンEclipse3.4
tomcat5.5
上記の環境で、サーブレットの参考書に沿ってサンプルを作成していたのですが、パラメータボックスに日本語を入力すると文字化けしてしまい、ブラウザに日本語で表示することができません。
英文字では問題なく表示できるので、エンコード・デコードのどこかで間違っているのだと思うのですが、参考書に書いてあることを試しましても、うまくいきません。
どなたかご指導お願いいたします。
----------
echo.jsp
----------
<%@page contentType="text/html; charset=...続きを読む

Aベストアンサー

拙者宅の環境でテストすると、
●ケース1
> useBodyEncodingForURI="true"
を記述した場合、 EchoServlet2クラスにて受け取れるパラメータが既にUnicodeに
エンコーディング済みになってましたよ。
ですから、Unicodeパラメタに
> request.setCharacterEncoding("Windows-31J");
とすると、当然文字化けしました。(UnicodeはWindows-31Jじゃないですからね)

●ケース2
> useBodyEncodingForURI="true"
を指定しない場合には、EchoServlet2クラスにて受け取れるパラメータはWindows-31J
となっています。
ですから、
> request.setCharacterEncoding("Windows-31J");
を使って、正しくエンコーディング出来ました。

確認環境:
Windows2000Pro
JDK1.6.0_04
Tomcat5.5.12
Firefox2.0,0.17

拙者宅の環境でテストすると、
●ケース1
> useBodyEncodingForURI="true"
を記述した場合、 EchoServlet2クラスにて受け取れるパラメータが既にUnicodeに
エンコーディング済みになってましたよ。
ですから、Unicodeパラメタに
> request.setCharacterEncoding("Windows-31J");
とすると、当然文字化けしました。(UnicodeはWindows-31Jじゃないですからね)

●ケース2
> useBodyEncodingForURI="true"
を指定しない場合には、EchoServlet2クラスにて受け取れるパラメータはWindows-31J
となってい...続きを読む

QJSPとサーブレット間での画面遷移でうまく表示できません。

いつもお世話になっております。。。
eclipse3.4
tomcat6.0
の環境で作業しています。
JSPから受け取ったパラメータをサーブレットで条件分岐して、
条件ごとにdispatch fowardで異なったページに遷移させるページを作りたいのですが、うまくいきません。

送信JSPで、
<form action="受け取りサーブレット名" method="post">
<input type="radio" name="url" value="value1"checked>
<input type="radio" name="url" value="value2">
<input type="radio" name="url" value="value3">
<input type="submit" value="jump!">
</form>

と書き、受け取りでサーブレットで

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

perform(request, response);
}
     private void perform(HttpServletRequest request,
HttpServletResponse response)         throws ServletException, IOException {

response.setContentType("text/plain; charset=Windows-31J");
request.setCharacterEncoding("Windows-31J");

request.getParameter("url");
String i = request.getParameter("url");

if( i.equals("value1")) {
          request.getRequestDispatcher("/遷移先1").forward(request,response);

}else if(i.equals("value2")) {
          request.getRequestDispatcher("/遷移先2").forward(request,response);

}else if(i.equals("value3")) {
          request.getRequestDispatcher("/遷移先3").forward(request,response);

としています。

これでJSPからデバッグを実行すると、変数iにparam"url"でとってきた"value1"が入っているので、getParameterが成功しているのが分かりますが、その後なぜか遷移先に移りません。

おそらくdispaccher fowardがうまくいっていないか、
if文が間違ってるかだと思うのですが、
どなたかご教授くださいm(_ _)m

いつもお世話になっております。。。
eclipse3.4
tomcat6.0
の環境で作業しています。
JSPから受け取ったパラメータをサーブレットで条件分岐して、
条件ごとにdispatch fowardで異なったページに遷移させるページを作りたいのですが、うまくいきません。

送信JSPで、
<form action="受け取りサーブレット名" method="post">
<input type="radio" name="url" value="value1"checked>
<input type="radio" name="url" value="value2">
<input type="radio" name="url" value="value3">
<input t...続きを読む

Aベストアンサー

JSPへのリダイレクションなら、
HttpServletResponse#sendRedirect();
を使用すれば、出来ませんか。

Qテキストボックスに遷移するごとに○が追加されるjsp

こんにちは。
前にも質問させていただきましたが、再度お願いします。

画像のようなテキストボックスがあり、OKボタンを押下するごとに○が1つずつ追加され、全部埋まった状態でOKを押すとまた最初からになるというjspなんですが、下記コードまではこぎつけましたが、分からなくなりました。

-------------------------------------------------
<%@page language="java" %>
<%@page contentType="text/html;charset=Shift_JIS" %>

<%

int index = -1;
request.setCharacterEncoding("SHIFT_JIS");
String strBox=request.getParameter("box");
if(strBox!=null){
session.setAttribute("box",strBox);

%>

<HTML><HEAD><TITLE>問題1</TITLE>
</HEAD><BODY>
問題1<BR>

<FORM ACTION="mondai1.jsp" METHOD="post">


<%
for(int i=0; i<9; i++){
String value="";
if(i<=index){
value="○";
}
%>
No.<%=i+1%><input type="text" name="box" value="<%=value%>"><BR>

<%}%>
<%
index++;
%>

<INPUT TYPE="submit" VALUE="ok">

</FORM>
</BODY></HTML>

-------------------------------------------------

以上がコードです。

1回目は上手くいきますが、2回目以降もテキストボックスの中に○が追加されません。

「session.getAttribute()」の使い方がよく分かりません。

画像は1枚目が1番最初or全部埋まってからまた戻ってきたもの、2枚目が3回目、3枚目が9回目のものです。

ご教示お願いします。

こんにちは。
前にも質問させていただきましたが、再度お願いします。

画像のようなテキストボックスがあり、OKボタンを押下するごとに○が1つずつ追加され、全部埋まった状態でOKを押すとまた最初からになるというjspなんですが、下記コードまではこぎつけましたが、分からなくなりました。

-------------------------------------------------
<%@page language="java" %>
<%@page contentType="text/html;charset=Shift_JIS" %>

<%

int index = -1;
request.setCharacterEncoding("SHIFT_JIS")...続きを読む

Aベストアンサー

こんにちは。
前の質問のところが追加されていたんですね気づきませんでした。

単純にsessionを使うというだけであれば
前回提示したソースにあるindの受け渡しをsessionに入れるようにすればhiddenを使わなくても動作します。

request.getParameter("ind")をsession.getAttribute("ind")
<input>のhiddenを消してind値をセッションに格納します。

APIを見ればわかりますが、int等はそのまま入らないので注意です。

>「session.getAttribute()」の使い方がよく分かりません。
セッションから指定されたキーの値を取得するメソッドになります。

例えば「こんにちは」を「msg」というキーで扱う場合

セッションにセット
session.setAttribute("msg","こんにちは");

セッションから取得する場合
String message = session.getAttribute("msg");
messageに「こんにちは」が入ります。

こんにちは。
前の質問のところが追加されていたんですね気づきませんでした。

単純にsessionを使うというだけであれば
前回提示したソースにあるindの受け渡しをsessionに入れるようにすればhiddenを使わなくても動作します。

request.getParameter("ind")をsession.getAttribute("ind")
<input>のhiddenを消してind値をセッションに格納します。

APIを見ればわかりますが、int等はそのまま入らないので注意です。

>「session.getAttribute()」の使い方がよく分かりません。
セッションから指定...続きを読む

Qサーブレット-サーブレットの通信で文字列を送りたいのですが

サーブレット間の通信で文字列(String)を送りたいのですが
うまく受け取れません。
URLEncoder.encodeをつかって変換して送り、
URLDecoder.decodeで受けとってます。お願いします。

Aベストアンサー

具体的に、どうなってしまうのかが分からないと、答え様がないですね。

(1)最初の文字列
(2)URLEncoder.encodeの結果
(3)URLDecoder.decodeの結果
が提示されていると、有力なヒントになるはず。差し支えなければご提示を。

QsubmitボタンしかないJSPからActionへの遷移

submitボタン一つしかないJSPのページから、ボタンが押された時にActionの中に入ってほしいのですが、入力項目があれば<html:form action="/○○Action">と書けばFormに格納され、○○Actionの中に入れると思うのですが、入力項目がないため、<html:form>を使っていいのかどうかがわかりません。他にただActionの中に入れるタグがあれば教えていただきたいと思います。
よろしくお願いします。

Aベストアンサー

>とありますが、struts-configにはその移動先のActionに空のformを定義してあげる必要があるのでしょうか?
必要です。空のFormBeanなどを作成して定義してください。


人気Q&Aランキング

おすすめ情報