【お知らせ】カテゴリの見直しについて

HTMLのフォームに入力されたテキストフィールドの値より処理を変化させる
ロジックを作ろうと下記のようにプログラムしました。
テキストフィールドに何か入力して送信した場合は、elseの処理を正常に行ってくれるのですが、
未入力でsubmitした場合だと、処理が止まってブラウザ上には真っ白な画面しか表示されません。
やはり判定文が悪いのでしょうか?
未入力のテキストフィールドの判定方法を教えてください。

-----------------------------------------------------
String tf1 = request.getParameter("text1");
String tf2 = request.getParameter("text2");

if((tf1 == null) || (tf2 == null)) {
 HttpSession session = request.getSession();
 session.setAttribute("errmessage", "未入力の項目があります。");

 RequestDispatcher dispatcher
    = request.getRequestDispatcher("/err.jsp");
 dispatcher.forward(request, response);
}
else {
 //テキストフィールドに何かが入力されている場合の処理
}

このQ&Aに関連する最新のQ&A

A 回答 (1件)

空白の文字列が設定されているはずなので、



if (tf1 == null || tf1.equals("") || tf2 == null || tf2.equals("")) {
  …
}

とした方が良いでしょう。tf1 == null は、フォームの方の記述を間違う
可能性もあるので、念の為残しておきましょう。
    • good
    • 1
この回答へのお礼

出来ました!

(空の)文字列と照らし合わせるときは"equals("")"を
使用すればよかったんですね。

頭の中のもやもやがパッと晴れた気分です!
どうもありがとうございました。

お礼日時:2001/09/13 18:20

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QJSPのNULLレコード表示について教えて下さい。

JSPでテーブルのレコードを表示するWEBを作成したのですが
レコードで空白の部分が「null」という表示になって出てしまいます。

これを空白で表示する事はできないのでしょうか?
エンコードの問題なのか分からず困っています。。。
教えて下さい!

Aベストアンサー

<% if (変数 == null) { %>
<%= "" %>
<% } else { %>
<%= 変数 %>
<% } %>

ってだけではないのです??

QServletでテキストボックスに入力された内容を追記したい。

Servletでテキストボックスとボタンを置きsubmitすると下にいくつも追記できるようにしたいです。そのときに
ブラウザを複数起動しても独立して稼動できるようにしたいです。

自分の考えとしては、submitしたデータをArrayListに取り込んでhtmlに返そうと思って下記のブログラムを
書いてみましたがうまく作動しませんでした。

何か良い方法がありましたら教えてください。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTest extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException
{
ArrayList al = new ArrayList();

// ヘッダに出力形式をセット
res.setContentType("text/html; charset = Shift_JIS");

// 出力ストリームを作成
PrintWriter pw = res.getWriter();

// テキストボックスからデータを受け取る
String input = req.getParameter("param");

al.add(input);




// テキストボックスが空の場合
if(input == null)
{
input = "";
}

// HTML文を出力
pw.println("<html><head>");
pw.println("<title>SrvletTest</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<form>");
pw.println("<input type = 'text' name = 'param' maxlength = 20>");
pw.println("<input type = 'submit'><br>");

for(int i = 0; i < al.size(); i++)
{
pw.println(al.get(i));
}

pw.println("</form>");
pw.println("</body></html>");
pw.close();
}
}

Servletでテキストボックスとボタンを置きsubmitすると下にいくつも追記できるようにしたいです。そのときに
ブラウザを複数起動しても独立して稼動できるようにしたいです。

自分の考えとしては、submitしたデータをArrayListに取り込んでhtmlに返そうと思って下記のブログラムを
書いてみましたがうまく作動しませんでした。

何か良い方法がありましたら教えてください。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTe...続きを読む

Aベストアンサー

こんな感じです。
ちなみに、動作確認はしていませんので。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTest extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException {

// ヘッダに出力形式をセット
res.setContentType("text/html; charset = Shift_JIS");

// 出力ストリームを作成
PrintWriter pw = res.getWriter();

// セッションからすでに表示されたデータを取得
HttpSession session = req.getSession();
ArrayList al = (ArrayList)session.getAttribute("oldData");
if( al == null ) {
al = new ArrayList();
session.setAttribute("oldData", al);
}

// テキストボックスからデータを受け取る
String input = req.getParameter("param");

// テキストボックスが空の場合
if(input == null) {
input = "";
}

al.add(input);

// HTML文を出力
pw.println("<html><head>");
pw.println("<title>SrvletTest</title>");
pw.println("</head>");
pw.println("<body>");
pw.println( "<form method=\"POST\" action=\"ServletTest\">" );
pw.println("<input type = 'text' name = 'param' maxlength = 20>");
pw.println("<input type = 'submit'><br>");

for(int i = 0; i < al.size(); i++) {
pw.println(al.get(i));
}

pw.println("</form>");
pw.println("</body></html>");
pw.close();
}
}

こんな感じです。
ちなみに、動作確認はしていませんので。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTest extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException {

// ヘッダに出力形式をセット
res.setContentType("text/html; charset = Shift_JIS");

// 出力ストリームを作成
PrintWriter pw = ...続きを読む

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

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

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



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

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

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

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

Q送信ボタン押下時に値が未入力だとエラーにしたい

お世話になります。

ユーザー名とパスワードを入力して送信するシンプルなログイン画面を作成しているのですが、ユーザー名かパスワードが未入力の状態で送信(ログイン)ボタンを押した場合はエラーとし、情報を送信しないように出来ますでしょうか。

ログインボタンを押下した際にポップアップ・ウインドウが表示されて「ユーザ名が未入力です」などと画面表示できるのが理想なのですが。。。

現在は下記のようなソースを書いております。

<input type="text" name="username">
<input type="password" name="password">

<input type="submit" value="ログイン">

どなたがご存知の方、お教えいただければ幸いです。

Aベストアンサー

こんにちは。

<form action="xxx" method="post" name="loginForm" onSubmit="return check();">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="ログイン">
</form>

<head>と</head>の間に

<script type="text/javascript">
<!--

function check () {
var userName = document.loginForm.username.value;
var passWord = document.loginForm.password,value;

if ( userName == "" ) {
alert ( "ユーザ名を入力して下さい。" );
document.loginForm.username.focus();
return false;
}

if ( passWord == "" ) {
alert ( "パスワードを入力して下さい。" );
document.loginForm.password.focus();
return false;
}

return true;
}

//-->
</script>


こうすることにより、送信時にcheckが呼ばれ、問題が無ければ送信され、
問題があった場合はアラートにて表示を行い、
自動的に問題のあるフォームへフォーカスが移ります。

試してみてください。

こんにちは。

<form action="xxx" method="post" name="loginForm" onSubmit="return check();">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="ログイン">
</form>

<head>と</head>の間に

<script type="text/javascript">
<!--

function check () {
var userName = document.loginForm.username.value;
var passWord = document.loginForm.password,value;

if ( userName == "" ) {
alert ( "ユーザ名を入力して下さい。" ...続きを読む

Qフォームの中身が空白なら

フォームの中身が空白なら
<FORM name="

<INPUT type="submit" name="exec" value="実行">
<INPUT type="submit" name="cancel" value="キャンセル"></FORM>

INPUTを押しても反応しないようにする場合は
どのようにすれば良いのでしょうか?

現在はINPUTの実行を押すと
他のページに移行するようになっています。
空白なら他のページに移行しないように作り変えたいと思っています。

よろしくお願いします。

Aベストアンサー

どちらかというとformのonSubmitでやる方が
一般的ではないでしょうか?

<FORM onSubmit="if(this.data.value==''){return false}">
<INPUT type="text" name="data" value="">
<INPUT type="submit" name="exec" value="実行">
<INPUT type="reset" name="cancel" value="キャンセル">
</FORM>

もちろん、スクリプトが無効な端末からは必ず
送られてしまいます。それがいやなら、submit
でモノを送るのはやめてボタンに実行属性をつけて
ください。そうすればスクリプトが無効なユーザー
からはデータが送れなくなります。↓こんなん?

<FORM onSubmit="if(this.data.value==''){return false}">
<INPUT type="text" name="data" value="">
<INPUT type="button" name="exec" value="実行" onClick="this.form.submit()">
<INPUT type="reset" name="cancel" value="キャンセル">
</FORM>

今回はdataしか見ていませんが、もしチェックする
項目がおおいようであれば、ユーザー関数をご利用
ください。内容がわからなければjavascriptの
ページをご参照ください。

ちなみにキャンセルをsubmitするのはどうかと
思いましたので勝手にresetにしてあります。
あしからず

どちらかというとformのonSubmitでやる方が
一般的ではないでしょうか?

<FORM onSubmit="if(this.data.value==''){return false}">
<INPUT type="text" name="data" value="">
<INPUT type="submit" name="exec" value="実行">
<INPUT type="reset" name="cancel" value="キャンセル">
</FORM>

もちろん、スクリプトが無効な端末からは必ず
送られてしまいます。それがいやなら、submit
でモノを送るのはやめてボタンに実行属性をつけて
ください。そうすればスクリプトが無効なユーザー
からはデ...続きを読む

QJSP/サーブレットで一般的な入力チェックの仕組みについて

JSP/サーブレットで一般的な入力チェックの仕組みについて

いつもお世話になります。

JSP/サーブレットでWebシステムを作っています。
特別なフレームワークは使っておらず、素のJavaだけで作っているのですが、JSP/サーブレットでWebシステムを開発する場合で、入力チェックでエラーがあった場合、
下記のような動作を実現したいのですが、一般的にはどのような作りになるのでしょうか。

・画面の入力内容はそのまま
・メッセージ領域にエラーメッセージを表示
・エラーがあった項目を赤くする

これらはJavaScriptでしか実現する方法は無いように思っていますが、できればJavaScriptは
使用しない方向で、最悪3番目はできなくてもよいです。

宜しくお願い致します。

Aベストアンサー

JSPを使っているならできると思うけど。

・画面の入力内容はそのまま
・メッセージ領域にエラーメッセージを表示
・エラーがあった項目を赤くする

どれもHTMLの加工の問題でしょう?

Servletがリクエストを受け取る
→入力チェック
→エラーがあったら前の画面のJSPを表示する
→JSP表示の際に、入力された内容をHTMLにセットする
→メッセージ領域にえらーメッセージを表示する
→ついでにエラー項目も赤くする

全部JSPでできる内容よね。


一般的なつくりとしては
まず、その画面の入力項目に対応したBeanを用意する。
Servletがリクエストを受け取り、リクスエトを解析しBeanに格納する。
Beanをその画面用のチェッククラスで入力チェックする。
エラーがなければ次画面を、エラーがあれば呼び出し元画面のJSPを要求。
エラーがあった場合、エラーメッセージをセッションなりリクエストなりに格納。
JSP表示時にBeanに格納されている内容を出力。
エラーメッセージが格納されていればそれを出力。
こんな感じね。

赤くするのはBeanについでにフラグを持たせておけば
JSPで判断できるんじゃない?

JSPを使っているならできると思うけど。

・画面の入力内容はそのまま
・メッセージ領域にエラーメッセージを表示
・エラーがあった項目を赤くする

どれもHTMLの加工の問題でしょう?

Servletがリクエストを受け取る
→入力チェック
→エラーがあったら前の画面のJSPを表示する
→JSP表示の際に、入力された内容をHTMLにセットする
→メッセージ領域にえらーメッセージを表示する
→ついでにエラー項目も赤くする

全部JSPでできる内容よね。


一般的なつくりとしては
まず、その画面の入力項目に対応したBeanを用意...続きを読む

Q空の文字列とnullと""

java初心者です。
空の文字列とnullと""の3つの関係がよくわかりません。

TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。

TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフォルトで空の文字列を返すと、書いてありました。

したがって、「""とnullは空の文字列とは異なる」という理解に至ったのですが、では空の文字列とは何なのかという疑問がわいてきました。

また、自分は""とnullの違いもよくわかっていません。""とnullが異なるものである、ということはわかるのですが・・・

質問をまとめると
・空の文字列とは何なのか?
・空の文字列は""やnullとどう違うのか?
です。よろしくお願いします。

java初心者です。
空の文字列とnullと""の3つの関係がよくわかりません。

TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。

TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフ...続きを読む

Aベストアンサー

tf.getText() == ""
では、オブジェクト比較になってしまうので、当然NGです。

"".equals(tf.getText())

とすれば良いでしょう。

空文字と呼ばれているものは、""と同じですよ。
Stringクラスで考えると、インスタンス化がされているが、中身の文字列が""の状態にあります。

nullは、そもそもオブジェクトすら設定されていない状態です。
例えばStringBufferクラスの変数を宣言しても、インスタンス化されていない状態、それがnullです。

QJSPでデータ一覧表示

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

BeanでDB接続、データを取得して、
それをJSPで一覧表示として表示させたいのですが、
どのタグを使えばいいのでしょうか。
また、その場合、タグは、Servletとか
Beanでかく必要がありますか。


たとえば、今、DBに30個データがある場合、
JSPでそれをTABLEタグを使って
一覧表示させますよね。

でもJSP側では、<TR><TD></TD></TR>の
データをいくつセットできるか、っていう
数がきまってますよね。てことは、
ServletとかBeanでHTMLのタグをうって
表示させないといけないんですか???


やりたいことは、BeanとかServletで
タグは書かずに、JSPでパラメータだけ
受け取って、その数だけデータを
表示させたいんです。
(JSPだけでタグをかいて、パラメータで
わたってきたデータを表示させたい。)

そういうことってできますか??
・・・説明がうまく出来てないかとは思うのですが
よろしくお願いします。

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

BeanでDB接続、データを取得して、
それをJSPで一覧表示として表示させたいのですが、
どのタグを使えばいいのでしょうか。
また、その場合、タグは、Servletとか
Beanでかく必要がありますか。


たとえば、今、DBに30個データがある場合、
JSPでそれをTABLEタグを使って
一覧表示させますよね。

でもJSP側では、<TR><TD></TD></TR>の
データをいくつセットできるか、っていう
数がきまってますよね。てことは、
ServletとかBeanでHTMLのタグをうって
表...続きを読む

Aベストアンサー

どもども^^

例えば、JSPが受け取ったデータ(Stringの配列やら、HashTableやら)を
ループを使って表示させればいいのでは??

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<table>
<%
for(int i=0; i < 結果.length; i++){
%>
<tr>
<td><%= 結果[i] %></td>
</tr>
<%
}
%>
</table>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

こんな感じでHTMLのタグをJAVAのforループの中にほりこんで
やれば、出来ると思うけど、だめ??

がんばってください。
わかりにくい説明だったら、ごめんね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング