• ベストアンサー
  • すぐに回答を!

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

  • 質問No.5491438
  • 閲覧数203
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0
こんにちは。
前にも質問させていただきましたが、再度お願いします。

画像のようなテキストボックスがあり、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回目のものです。

ご教示お願いします。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 51% (1060/2054)

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

単純に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に「こんにちは」が入ります。
補足コメント
noname#121048
こんにちは。
何度も質問申し訳ありません。

「session.getAttribute()」の使い方はよく分かりました。

こんな感じで限界なんですが、コンパイルしてくれません。

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


int index = -1;
try {
index = Integer.parseInt(session.getAttribute("ind"));
} catch ( Exception e ) {

}

if ( index >= 9 ) {
index = -1;
}
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<title>テスト</title>
</head>
<body>
<form action="tuikakadai5.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>
<% } %>
<input type="" name="ind" value="<%= index + 1 %>">
<input type="submit" VALUE="ok">
</form>

--------------------------------------------------------------
まず、setしてないので間違いだとは理解できますが、エラーで「シンボル: メソッド parseInt」が解決できませんと表示されるのがわかりません。

参考書などを見て、ただ単に名前などのデータをセッションで次に反映させるのは分かりましたが、今回引き継ぐのはループさせたテキストボックスの「"○"の状況(回数)」かと思われます。

そこで何をどう渡したり受け取ったりすればいいのかイマイチ実感できておりません。

宜しくお願いします。
投稿日時:2009/12/09 00:48

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 54% (1660/3060)

<%@page
language="java"
contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"
import="org.w3c.dom.*"
import="javax.xml.parsers.*"
import="org.w3c.dom.bootstrap.*"
import="org.w3c.dom.ls.*"
%><%

/* かなり無茶してみた。*/
/*
埋め込む形は嫌い。まともなXHTMLにする人いないんだもん(JSPの設計方針を意図的に無視しました。)
そういう理由で、質問文のコードから修正していく気がまったくない
*/
/* 教えて!gooの仕様でURIっぽい文字列の前後に不可視な文字が挿入されるので削除して使うべし。 */
/* web.xmlでソースコードの符号化方式をUTF-8に変更。*/
/* メソッドの分割ができないのが非常に辛い。Javaで処理を書いておいて、JSPで処理を呼び出す形の方がたぶん簡潔になるだろうな。*/
/* 難しそうに見えるかもしれないが、DOMやDOM 3 LSを学んでいればたいした事はない。*/

request.setCharacterEncoding("UTF-8");

int x = (session.getAttribute("current") != null)?(Integer)session.getAttribute("current"):0;


javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

javax.xml.parsers.DocumentBuilder builder = null;

builder = factory.newDocumentBuilder();

org.w3c.dom.DOMImplementation impl = builder.getDOMImplementation();

org.w3c.dom.Document doc = impl.createDocument(
"http://www.w3.org/1999/xhtml",
"html",
impl.createDocumentType(
"html",
"-//W3C//DTD XHTML 1.1//EN",
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd")
);
doc.setStrictErrorChecking(true);

org.w3c.dom.Element title = doc.createElementNS("http://www.w3.org/1999/xhtml","title");
title.appendChild(doc.createTextNode("Q5491438 TestCase 1"));

org.w3c.dom.Element head = doc.createElementNS("http://www.w3.org/1999/xhtml","head");
head.appendChild(title);

org.w3c.dom.Element ul = doc.createElementNS("http://www.w3.org/1999/xhtml","ul");

for (int i = 0;i < 9;i++){
org.w3c.dom.Element li = doc.createElementNS("http://www.w3.org/1999/xhtml","li");

li.appendChild(doc.createTextNode("No." + Integer.toString(i+1)));

org.w3c.dom.Element input = doc.createElementNS("http://www.w3.org/1999/xhtml","input");
/* この辺はお好みでどうぞ */
input.setAttribute("name","box" + Integer.toString(i));
if (i < x){
input.setAttribute("value","○");
}
li.appendChild(input);
ul.appendChild(li);
}

org.w3c.dom.Element submit = doc.createElementNS("http://www.w3.org/1999/xhtml","input");
submit.setAttribute("type","submit");

org.w3c.dom.Element p = doc.createElementNS("http://www.w3.org/1999/xhtml","p");
p.appendChild(submit);

org.w3c.dom.Element form = doc.createElementNS("http://www.w3.org/1999/xhtml","form");

/* ファイル名を変更しても動くようにしておけるなら、そっちの方が良い */
form.setAttribute("action","Q5491438-1.jsp");
form.setAttribute("method","post");
form.setAttribute("accept-charset","UTF-8");

form.appendChild(ul);
form.appendChild(p);

org.w3c.dom.Element body = doc.createElementNS("http://www.w3.org/1999/xhtml","body");
body.appendChild(form);

doc.getDocumentElement().appendChild(head);
doc.getDocumentElement().appendChild(body);

org.w3c.dom.bootstrap.DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();

org.w3c.dom.ls.DOMImplementationLS lsImpl =
(org.w3c.dom.ls.DOMImplementationLS)registry.getDOMImplementation("LS");

org.w3c.dom.ls.LSSerializer serializer = lsImpl.createLSSerializer();
/* 何故か俺の環境では影響ない。*/
serializer.getDOMConfiguration().setParameter("format-pretty-print",true);

session.setAttribute("current",(x + 1) % 10);

/* 表示する文字列の出力は最後に一回だけ。 */
out.println(serializer.writeToString(doc));

%>
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ