- ベストアンサー
テキストボックスに遷移するごとに○が追加されるjsp
- テキストボックスに遷移するたびに○が追加されるjspの実装方法について教えてください。
- テキストボックスの中に○が追加されない問題について、解決方法を教えてください。
- 画像を参考に、テキストボックスの中に○が追加される仕組みを説明してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 前の質問のところが追加されていたんですね気づきませんでした。 単純に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に「こんにちは」が入ります。
その他の回答 (1)
- himajin100000
- ベストアンサー率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)); %>
補足
こんにちは。 何度も質問申し訳ありません。 「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」が解決できませんと表示されるのがわかりません。 参考書などを見て、ただ単に名前などのデータをセッションで次に反映させるのは分かりましたが、今回引き継ぐのはループさせたテキストボックスの「"○"の状況(回数)」かと思われます。 そこで何をどう渡したり受け取ったりすればいいのかイマイチ実感できておりません。 宜しくお願いします。