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