プロが教えるわが家の防犯対策術!

HTMLから選択された情報をJSPで表示するプログラムを作っているのですがチェックボックスが選択されてるかどうかのプログラムの書き方がわかりません。
とりあえず出来ているところまでのソースを見せます。
・HTML
<input type="checkbox" name="aa" value="aa">
<input type="checkbox" name="aa" value="bb">
<input type="checkbox" name="aa" value="cc">
<input type="checkbox" name="aa" value="dd">
<select name="abc">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

・JSP
//情報をもらう
String abc = request.getParameter("abc");
String[] aa = request.getParameterValues("aa");

for(int i=0;i<aa.length;i++){
aa[i];
}
上のようにチェックボックスは情報を取り出しているんですが
選択されていないときはエラーになってしまいます。
for文の前に値が入っているかどうかのチェックをしなくてはいけないのですがどのように書いていいかわかりません。
誰か教えてください。

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

A 回答 (2件)

せめてエラーの内容を記述してください。


おそらくNullPointerExceptionだと思いますが・・・。

>上のようにチェックボックスは情報を取り出しているんですが
>選択されていないときはエラーになってしまいます。

たぶんaa.lengthの所でヌルポが発生していると思いますので、
aaがnullじゃなかったらというif文を付けてみてください。

if(aa != null) {
for(int i = 0 ; i < aa.length ; i++ ) {
aa[i]
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
if文をつけてやってみたいと思います。

お礼日時:2008/07/29 16:34

問題はぬるぽが来たら


チェックボックスにチェックを入れてください OK?
画面に遷移してOKボタンを押したら
最初のHTML画面にリダイレクトするように

したらいいと思います。
    • good
    • 0

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

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

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

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

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

QStrutsでチェックボックスの値を取得する方法

明細行のチェックボックスで、選択した状態で画面再表示時にチェックを外した場合、再度画面を表示すると外したはずのチェックが戻ってしまいます。
現象
1.下記「作成したJSP」のチェックボックスを選択し、サーバへ送る。
2.「ViewList」内のチェックボックス「testCheckBox」(boolean型)にtrueが設定される。
※ViewListはtestActionFormのList型で、javaでもIteratorで1件づつtestActionFormを取得し、「testCheckBox」を確認している
3.上記1と同じHTMLフォームにおいて、今度はチェックボックスの選択を外して、サーバへ送る。
4.チェックを外したにも関わらず、trueの状態になってしまう。
良い対処方法があれば、ご教授をお願いします

※他のホームページで、ActionFormに下記メソッドを記述すると、チェックボックスが正常に戻ると書いてあり、試しましたがダメでした。
画面ActionForm内に、testActionFormのListを作成し、その中にチェックボックスがある場合、適用されないのでしょうか?
public void reset(ActionMapping mapping, HttpServletRequest request){
testCheckBox=false;
}

☆作成したJSP
<%-- 明細行の反復表示 start --%>
<logic:iterate name="testActionForm" id="ViewList"property="ViewList" indexId="idx">
<!-- チェックボックス 開始-->
<td nowrap >
<html:checkbox property="testCheckBox" name="ViewList" indexed="true" index="idx" />
</td>
<!-- チェックボックス 終了-->
<!-- 入力テキスト 開始-->
<td nowrap >
<html:text property="testInput" size="50" maxlength="30" name="ViewList" indexed="true" index="idx" />
</td>
<!-- 入力テキスト 終了-->
<%-- 明細行の反復表示 end --%>
</logic:iterate>

明細行のチェックボックスで、選択した状態で画面再表示時にチェックを外した場合、再度画面を表示すると外したはずのチェックが戻ってしまいます。
現象
1.下記「作成したJSP」のチェックボックスを選択し、サーバへ送る。
2.「ViewList」内のチェックボックス「testCheckBox」(boolean型)にtrueが設定される。
※ViewListはtestActionFormのList型で、javaでもIteratorで1件づつtestActionFormを取得し、「testCheckBox」を確認している
3.上記1と同じHTMLフォームにおいて、今度はチェックボックス...続きを読む

Aベストアンサー

>>resetメソッドを定義するのは、ActionFormのクラスです。
>ActionFormのクラスに下記resetメソッドを定義しています。
>public void reset(ActionMapping mapping, >HttpServletRequest request){
>testCheckBox=false;
>}

ActionFormがもっているViewListのtestActionFormについてです。
public void reset(ActionMapping mapping, HttpServletRequest request){
for(int i=0;i<viewList.size();i++){
((testActionForm)viewList.get(i)).setTestCheckBox(false);
}
}

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

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

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

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


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

Aベストアンサー

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

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

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

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

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

Qラジオボタンの選択肢をサーブレットで取得するには?

サーブレットの開発を行っていますが、ブラウザー側で
ラジオボタンを選択した際に何を選択したかのデータを取得したいのです。
(下記のHTMLで言えば、割引手形か、手形貸付か、証書貸付というのを取得したいのです)
パラメーターをサーブレットで受け取りたいのですが
うまくいきません
HTMLでHIDDENを使用するとか聞いたことはあるのですがどのようにコーディングすればいいんでしょうか?
よろしくお願いいたします。

<p>
<input type="radio" name="radiobutton" value="radiobutton">
割引手形 
<input type="radio" name="radiobutton" value="radiobutton">
手形貸付 
<input type="radio" name="radiobutton" value="radiobutton">
証書貸付
</p>

ブラウザー側からは
<form action="http://localhost/servlet/yuushi" method=post>
の指定を行っています。
サーブレットでの受け取り方を、
String p2=request.getParameter("radiobutton");
 とすると、p2=radiobuttonとデータがセットされました。

サーブレットの開発を行っていますが、ブラウザー側で
ラジオボタンを選択した際に何を選択したかのデータを取得したいのです。
(下記のHTMLで言えば、割引手形か、手形貸付か、証書貸付というのを取得したいのです)
パラメーターをサーブレットで受け取りたいのですが
うまくいきません
HTMLでHIDDENを使用するとか聞いたことはあるのですがどのようにコーディングすればいいんでしょうか?
よろしくお願いいたします。

<p>
<input type="radio" name="radiobutton" value="...続きを読む

Aベストアンサー

それぞれの項目の value を、ユニークにして下さい。例えば、

<input type="radio" name="radiobutton" value="1"> 割引手形 
<input type="radio" name="radiobutton" value="2"> 手形貸付 
<input type="radio" name="radiobutton" value="3"> 証書貸付

そうすれば、「手形貸付」を選択したときに

String p2 = request.getParameter("radiobutton");

とすれば、p2 は "2" になります。

Qチェックボックスの値を取り出したい

こんにちは JavaScript初心者です。
過去ログを見ながらここまでやったのですが、何も表示されません。
?マークの所で引っかかっていると思うのですがどなたかご教授願います。
やりたい事は、チェックボックスのチェックの入った所の値を取り出して表示したいのですが...
3つチェックされていてOKをクリックした時に、ABC と出てくるのが理想です。
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkform() {
for(i=1; i<=3; i++) {

chkdata(i) = document.form0.chk(i).Value    ?
var aa = chkdata(i)

document.write(aa)
}
}
//--></SCRIPT>

<FORM onSubmit="return chkform(this)" name = "form0">

<INPUT type="checkbox" name="chk" value="A" >
<INPUT type="checkbox" name="chk" value="B" >
<INPUT type="checkbox" name="chk" value="C" >

<INPUT type="submit" value="OK" >
</form>

</html>

こんにちは JavaScript初心者です。
過去ログを見ながらここまでやったのですが、何も表示されません。
?マークの所で引っかかっていると思うのですがどなたかご教授願います。
やりたい事は、チェックボックスのチェックの入った所の値を取り出して表示したいのですが...
3つチェックされていてOKをクリックした時に、ABC と出てくるのが理想です。
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkform() {
for(i=1; i<=3; i++) {

chkdata(i) = document.form0.chk(i).Value   ...続きを読む

Aベストアンサー

これでは全然ダメです。
もう少し本なり見て勉強しましょう。

function chkform() {

var chkdata = new Array();
var aa = "";
var len = document.form0.chk.length;

for(i=0; i<len; i++) {
if ( document.form0.chk[i].checked ) {
chkdata[i] = document.form0.chk[i].value;
aa += chkdata[i];
}
}
document.write(aa);
}

やるなら、こんな感じで良いのでは?
#私的にはこんなのでも嫌ですが。。。

各行で何をやってるか理解した上でご使用ください。m(__)m

Qチェックボックスの返す値

<INPUT type="checkbox" name="check_1" value="1">
という記述だと、
チェックあるとき→1
チェックないとき→(空白)
となりますよね。
チェックあるとき→1
チェックないとき→0
にしたいときはどうすればよろしいのでしょうか?

Aベストアンサー

チェックボックスやラジオボタンはチェックされていないと何も送信されないので、JavaScript でチェックボックスの値を変更しても意味がありません。

JavaScript依存でよいなら、確実に値が送信される hidden を使って
  <input type="hidden" name="check_1" value="0">
  <input type="checkbox" onclick="this.form.check_1.value=this.checked ? 1 : 0">
のようにすれば、常に 1 か 0 が送信されます。

依存したくない場合は、CGI側でデフォルト値を指定するようにします。例えば Perl で、フォームデータを %FORM に入れている場合、デコード処理の後で
  $FORM{check_1} ||= 0;
のようにします。

QjavaでDBから取得したデータのJSP表示

JAVAでDBから取得し
ArrayList shikakuCdList = shikakuCd_Data();
request.setAttribute("shikakuCdList", shikakuCdList);

JSPでコンボボックスに表示しようと思います
<% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%>


<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<option value=" (1)ここの記述方法も  "></option>
<% }%>

という記述にしていますが、うまく動きません。
よろしくお願いします。

Aベストアンサー

><% for ( int i = 0; i < bumonlist.size(); i++ ){%>
><option value=" (1)ここの記述方法も  "></option>
><% }%>
この部分ですが、

もし、shikakuCd_Data()の返すArrayListの中身が
JavaBean(下記はTestBean)であれば、

<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<% TestBean test = (TestBean)bumonlist.get(i); %>
<option value="<%= test.ゲッター %>"></option>
<% }%>

もしくは、useBeanアクションをつかい、
coreライブラリのforEachタグを使って出力する方法もあります。
こちらの方法がお勧めですが。

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Qeclipseで、「ポート番号が使用中です」と表示されて困っています。

プログラムの勉強を始めたばかりなので、拙い質問ですが、ご存じの方は、是非、よろしくお願いします・・・。

eclipseを使って、webアプリケーションを作成しようとしたのですが、
JSP作成後、デバッグを行うと、
「localhostのTomcatv6.0サーバーで
必要な幾つかのポート(8005,8080,8009)が既に使用中です。サーバー
は既に別のプロセスで稼働中であるか、システム・プロセスがそのポートを使用中である可能性があります。このサーバーを始動するには、他のプロセスを停止するか、ポート番号を変更する必要があります。」
と表示され、デバッグできませんでした・・・。
そこで、Active Portsをダウンロードして使用中のポート番号を調べると、同じ番号のものはありません・・・。
さらに、いろいろネットで調べると、oracleをインストールしているとポート番号が競合する、とかいてあったのですが、oracle10gをインストールしたので、このせいなのでしょうか??
その為、oracleを削除したのですが・・・。
そこまでしか、対処方法はわからず、行き詰まりました。
この場合、一体、どう対処したらよいのでしょうか・・・??
現在の環境は、
・windowsXP、jdk1.6.0_03、jre1.6.0_06
・Tomcat6.0
・eclipse3.3→eclipseの「設定」からインストールしたTomcatを登録しました。
・oracle10g

以上、長くなりましたが、本当に困っているので、よろしくお願いします・・・。

プログラムの勉強を始めたばかりなので、拙い質問ですが、ご存じの方は、是非、よろしくお願いします・・・。

eclipseを使って、webアプリケーションを作成しようとしたのですが、
JSP作成後、デバッグを行うと、
「localhostのTomcatv6.0サーバーで
必要な幾つかのポート(8005,8080,8009)が既に使用中です。サーバー
は既に別のプロセスで稼働中であるか、システム・プロセスがそのポートを使用中である可能性があります。このサーバーを始動するには、他のプロセスを停止するか、ポート番号を変更する必...続きを読む

Aベストアンサー

Eclipseでサーバサイドプログラムを作成する場合、
Webアプリのための標準プラグインEclipse Web Tools Project(WTP)がなくてはならないものです。
HTMLやCSS、JSP、XSD等のエディタ、J2EEサーバとの連携機能、
Webサービス構築機能、DBアクセス機能等を提供してくれます。

1)WTPプラグインがインストールされており、
Eclipseウィンドウ全体「ワークベンチ」の左側に
プロジェクト・エクスプローラーにServersのフォルダが表示されており、
フォルダ内にlocalhost の Tomcat v5.5 サーバー-config
catalina.policy
catalina.properties
server.xml
tomcat-users.xml
web.xml
が表示されている。
2)Eclipse画面中央部エディタの下部に
Javadocビューや宣言ビューは問題ビューと同じ場所にサーバータブとして重ねて表示されている。
3)プロジェクト・エクスプローラーで、プロジェクトを右クリックで表示されるメニューの中の実行→サーバーで実行を選択すると、サーバーで実行のウィンドウから実行した結果のエラーメッセージ localhostのTomcatv6.0サーバーで
必要な幾つかのポート(8005,8080,8009)が既に使用中です。…である。

以上1)から3)を前提としますと、

【原因】
Tomcatが実行中であるためです。 
Eclipse Web Tools Project(WTP)は、Tomcatを実行します。
したがって、Tomcatが実行中であるため、既に使用中です。
と警告しているのです。

【対応】
Tomcat ManagerからStop serviceを選択して、Tomcatを停止しておき、
実行→サーバーで実行して、Eclipseウィンドウのサーバータブを見ると
Tomcatを実行している様子が見られると思います。
コンソールタブには、ログが表示されると思います。

以上です。

Eclipseでサーバサイドプログラムを作成する場合、
Webアプリのための標準プラグインEclipse Web Tools Project(WTP)がなくてはならないものです。
HTMLやCSS、JSP、XSD等のエディタ、J2EEサーバとの連携機能、
Webサービス構築機能、DBアクセス機能等を提供してくれます。

1)WTPプラグインがインストールされており、
Eclipseウィンドウ全体「ワークベンチ」の左側に
プロジェクト・エクスプローラーにServersのフォルダが表示されており、
フォルダ内にlocalhost の Tomcat v5.5 サーバー-config
...続きを読む

Q空欄のテキストフィールドの判定の方法

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 {
 //テキストフィールドに何かが入力されている場合の処理
}

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

-----------------------------------------------------
String tf1 = request.getPara...続きを読む

Aベストアンサー

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

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

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

Q配列をセッションに割り当てた後で

javaBeanでDBにアクセスして、取得した値を配列に格納します。その配列をサーブレット側でgetメソッド使って取得し、セッションに割り当てます。その後、JSP側でセッションを通して配列の各要素を取り出し表示させたいのですが<%= session.getAttribute("Date") %>←(Dateが配列)では配列の各要素ではなく配列そのものが取り出されるのか、
[Ljava.lang.String;@737371
のような文字が表示されてしまいます。
セッションで割り当てられた配列の各要素の値の取得のやり方がわかる方どうかご教授お願いします。

Aベストアンサー

setAttribute() で、保存したものがそのまま getAttribute() で取得できる
わけですから、配列をセットしていれば、ゲットできるのは配列です。

例えば、一番目の要素の値であれば、

<%= session.getAttribute("Date")[0] %>

です。


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

人気Q&Aランキング