竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
チェックボックスの入力チェック
by ばく[owada]
--------竹形による【注】--------------------------------------------------
JSPにおけるチェックボックスの扱い方については、↓の記事にまとめました。
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=305
-----------------------------------------------------------------------
チェックボックスに何も選択されていなかった時にエラーメッセージを出すための方法について教えてください。

@items表にあるレコード数を取得する方法は、
 リザルトセットを元に以下の取得方法でよいでしょうか?
 rs.next();
 int intCount=rs.getInt(1);

Aチェックボックスにチェックが入っているかを確認する関数は何ですか?

BAの関数を記述する上で関係することだと思うのですが
 NAME要素を変数を使って生成していますが
 if文の条件式にどう反映すればいいのでしょうか?
 
 チェックをされていないチェックボックスの数を算出して
 行数と比較するようなことが出来るのでしょうか?

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


<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ page import="java.sql.*"%>
<%
//JDBCドライバを登録
Class.forName("com.mysql.jdbc.Driver");
//データベース接続文字列を作成
String strConn = "jdbc:mysql://localhost/Sample"
  + "?user=user1&password=password"
  + "&useUnicode=true&characterEncoding=cp932";
//コネクションオブジェクトを取得
Connection conn = DriverManager.getConnection(strConn);
//ステートメントオブジェクトを取得
Statement stmt = conn.createStatement();
//SQLコマンドを作成
String strSql = "SELECT * FROM items";
//問い合わせを実行してリザルトセットを取得
ResultSet rs = stmt.executeQuery(strSql);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
  <TITLE>JSPサンプル</TITLE>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-31J">
  <LINK REL="stylesheet" TYPE="text/css" HREF="style.css">
</HEAD><BODY>
<H1>名称テーブル修正</H1>
<DIV CLASS="section">
<FORM NAME="F1" ACTION="Name_Update_Confirm.jsp" METHOD="post" ONSUBMIT="return check();" >
<TABLE CLASS="up">
<TR><TH CLASS="C1">修正</TH><TH>アイテムコード</TH><TH>アイテム名</TH><TH>単価</TH></TR>
<%
int i=0;
while(rs.next()){%>
<TR>
<TD CLASS="C2"><INPUT TYPE="checkbox" NAME="c1_<%=i%>"  VALUE="<%=i%>"></TD>
<TD CLASS="C3"><%=rs.getString("Co_Item")%><INPUT TYPE="hidden" NAME="Co_Item" VALUE="<%=rs.getString("Co_Item")%>"></TD>
<TD CLASS="C3"><%=rs.getString("Item_Name")%><INPUT TYPE="hidden" NAME="Item_Name" VALUE="<%=rs.getString("Item_Name")%>"></TD>
<TD CLASS="C4"><%=rs.getString("Price")%><INPUT TYPE="hidden" NAME="Price" VALUE="<%=rs.getString("Price")%>"></TD>
</TR>
<%
i++;
}
stmt.close();
conn.close();
%>
</TABLE>
</DIV>
<DIV CLASS="section">
<INPUT TYPE="submit" VALUE="選 択">
<INPUT TYPE="button" VALUE="戻 る" ONCLICK="location.href='Menu.jsp'">
</FORM>
</DIV>
</BODY></HTML>

投稿:ばく[owada]/2006年 10月 05日 18時 33分 /更新:2008年 02月 13日 20時 29分
RE:チェックボックスの入力チェック
by 竹形 誠司[takegata]
@items表にあるレコード数を取得する方法は、
 リザルトセットを元に以下の取得方法でよいでしょうか?
 rs.next();
 int intCount=rs.getInt(1);
この方法はあまりよくないですね。というのは、フォームを送信している間にレコードが増えている可能性があるからです。フォームの表の行数を調べるには、前にサンプルで示したとおり、パラメータの配列の数を使う方法がいいと思います。
Aチェックボックスにチェックが入っているかを確認する関数は何ですか?
そのようなものは特にありません。チェックボックスはチェックが入っているときだけパラメータが送信されるので、前に示したサンプルでは、request.getParameter() を使ってパラメータが送られてきたかどうかを調べています。ちなみにJavaでは「関数」という用語を使いません。Cで関数と呼んでいるものを「メソッド」と呼んでいます。
BAの関数を記述する上で関係することだと思うのですが
 NAME要素を変数を使って生成していますが
 if文の条件式にどう反映すればいいのでしょうか?
 
 チェックをされていないチェックボックスの数を算出して
 行数と比較するようなことが出来るのでしょうか?
「関数を記述する」というのが何を指しているのか分からないのですが、
チェックボックスの NAME 属性が c1_0 の場合は
request.getParameter("c1_0")
が nullでないかどうかを調べればチェック されているかどうかが分かります。
投稿:竹形 誠司[takegata]/2006年 10月 05日 20時 34分 /更新:2006年 10月 05日 20時 36分
RE:チェックボックスの入力チェック
by ばく[owada]
こんにちは。

send_chk()でレコード数と各チェックボックスの値を格納し、
function check()で上記の値とカウンターの値を比較し
すべてにチェックが入っていない場合にメッセージを表示するようにしました。

しかし、BODY部でチェックボックスのNAME要素を変数を使っていて、
send_chk()での各チェックボックスの値の格納がうまく出来ない状態です。

チェックボックスのNAME要素もしくはval[i]へのデータ挿入部分をどのように修正すればよいですか?

よろしくお願いします。


<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.text.*"%>
<%
//JDBCドライバを登録
Class.forName("com.mysql.jdbc.Driver");
//データベース接続文字列を作成
String strConn = "jdbc:mysql://localhost/Sample"
  + "?user=user1&password=password"
  + "&useUnicode=true&characterEncoding=cp932";
//コネクションオブジェクトを取得
Connection conn = DriverManager.getConnection(strConn);
//ステートメントオブジェクトを取得
Statement stmt = conn.createStatement();
//SQLコマンドを作成
String strSql = "SELECT * FROM items";
//問い合わせを実行してリザルトセットを取得
ResultSet rs = stmt.executeQuery(strSql);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD>
<TITLE>JSPサンプル</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-31J">
<LINK REL="stylesheet" TYPE="text/css" HREF="style.css">
<SCRIPT TYPE="text/javascript"><!--
var val  = new Array(); // 引き渡し変数
function check(){
    send_chk();    // 関数を呼ぶ
    var chk_max = document.form1.Co_Item.length; //CheckBoxの数
    for(i=0;i<chk_max;i++){
        var x=0;
        for(j=0;j<chk_max;j++){
        if(val[j]==NaN){
            x=x+1;
            if(x==chk_max){
                alert("チェックされているものがありません。");
            return false;
            }
        }
        }
    }
}
// CheckBoxの内容を調べる処理
function send_chk(){
    var chk_max = document.form1.Co_Item.length; //CheckBoxの数
    for (i=0;i<chk_max;i++){
        val[i] = document.form1.c1_+i.checked;
    alert(val[i]); //格納された値の確認
    }
    return val;
}
</SCRIPT>
</HEAD><BODY>
<%NumberFormat exObject = NumberFormat.getNumberInstance();%>
<H1>名称テーブル修正</H1>
<DIV CLASS="section">
<FORM NAME="form1" ACTION="Name_Update_Confirm.jsp" METHOD="post" ONSUBMIT="return check();" >
<TABLE CLASS="up">
<TR><TH CLASS="C1">修正</TH><TH>アイテムコード</TH><TH>アイテム名</TH><TH>単価</TH></TR>
<%
int i=0;
while(rs.next()){%>
<TR>
<TD CLASS="C2"><INPUT TYPE="checkbox" NAME="c1_<%=i%>"  VALUE="<%=i%>"></TD>
<TD CLASS="C3"><%=rs.getString("Co_Item")%><INPUT TYPE="hidden" NAME="Co_Item" VALUE="<%=rs.getString("Co_Item")%>"></TD>
<TD CLASS="C3"><%=rs.getString("Item_Name")%><INPUT TYPE="hidden" NAME="Item_Name" VALUE="<%=rs.getString("Item_Name")%>"></TD>
<TD CLASS="C4"><%=exObject.format(rs.getLong("Price"))%><INPUT TYPE="hidden" NAME="Price" VALUE="<%=rs.getString("Price")%>"></TD>
</TR>
<%
i++;
}
stmt.close();
conn.close();
%>
</TABLE>
</DIV>
<DIV CLASS="section">
<INPUT TYPE="submit" VALUE="選 択">
<INPUT TYPE="button" VALUE="戻 る" ONCLICK="location.href='Menu.jsp'">
</FORM>
</DIV>
</BODY></HTML>
投稿:ばく[owada]/2006年 10月 12日 14時 32分 /更新:2006年 10月 12日 14時 32分
RE:チェックボックスの入力チェック
by 竹形 誠司[takegata]
val[i] = document.form1.c1_+i.checked;
この部分が問題ですね。文字列に変数を繋げるのであれば
"document.form1.c1_"+i
のように書く必要があります。

文字列からオブジェクトを取得するにはevalという関数を使います。こんな感じです。
function send_chk(){
    var chk_max = document.form1.Co_Item.length; //CheckBoxの数
    for (i=0;i<chk_max;i++){
        obj=eval("document.form1.c1_"+i);
        val[i] = obj.checked;
    alert(val[i]); //格納された値の確認
    }
    return val;
}
投稿:竹形 誠司[takegata]/2006年 10月 12日 16時 35分 /更新:2006年 10月 12日 16時 36分
RE:チェックボックスの入力チェック
by ばく[owada]
おはようございます。

チェックされているかのtrue・falseの値がちゃんと取れるようになり、
全チェックボックス未チェックのエラーメッセージが表示できるようになりました。

ありがとうございました。

投稿:ばく[owada]/2006年 10月 16日 10時 36分 /更新:2006年 10月 16日 10時 36分