質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

336閲覧

Cookieに選択したプルダウンの内容を保存したい

seiran10

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/11/06 02:53

編集2023/11/06 05:31

実現したいこと

Cookieを取得し、前回選択したプルダウンの選択肢と同じものを自動で選択する。

前提

javaを使ってCookieを利用するサンプルシステムを作っています。
jspとjavaを使いたいです。

文字列としてのcookieの設定や取得はうまくできているみたいなのですが、これでどうやったらプルダウンの選択肢をセットできるのかわからなくて困っています。
素人質問で申し訳ないです。

またcookieが取れているか確認するところで止まっているので、根本的に違う指定をしているところもあります。ご容赦ください。

該当のソースコード

jsp

1送信フォーム.JSP 2. 3. 4<% 5 String value = cookieTest.getCookie(request, "cookie_name"); 6if(value == null) { 7 cookieTest.setCookie(request, response, "name", "cookie_value"); 8. 9<form action="URL" method="post"> 10<h2>申請</h2> 11<h5>時間</h5> 12 <select name="timeframe" id="time"> 13 <option value="1">朝</option> 14 <option value="2">昼</option> 15 <option value="3">夜</option> 16</section> 17<br> 18 19<button>送信</button>

java

1 2public static void setCookie(HttpServletRequest request, HttpServletResponse response, String name, String value){ 3 Cookie cookie =new Cookie(name, value); 4 cookie.setMaxAge(60*3); 5 response.addCookie(cookie); 6} 7 8publix static String getCookie(HttpServletRequest request, String name){ 9 String timeframe = null; 10 Cookie[] cookies = request.getCookie(); 11 if(cookies != null){ 12 for(int i=0; i<cookies.length; i++) { 13 if(cookies.[i].getName().equals("timeframe")) { 14 timeframe = cookies[i].getValue(); 15 16 break; 17 } 18 } 19 } 20 } 21 return timeframe; 22 } 23}

forward.java

1. 2. 3. 4 5public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcepton { 6 7 request.setCharacterEncoding("UTF-8"); 8 String timeframe = request.getParameter("time"); 9 HttpSession session1 =request.getSession(true); 10 session.setAtrtribute("timeframe", timeframe); 11 12 Requestdispatcher rd = request.getRequestDispatcher(次のPASS); 13 rd.forward(request,response); 14 } 15}

forwardのソースが関係あるか不明だったので乗せています。
これをJSPのselectの内容をcookieに保存して取得するように変更したいです。

###調査したこと・試したこと
cookieの利用方法については一通り調べてあります。また${_Cookie}で取り出せるというのはわかってはいます。
現状、<%@ %>で文字を出力することでcookieのセットができていることは確認しています。(今回はcookie_valueの文字が出力)
別のシステムを触った際はループの中にプルダウンの選択関係のソースを書き込んで、1行ごとに確認、またボタンの操作ごとに持ってくる内容を変更していました。ほぼ同じことをやればいいと思うのですが、この時はcookieに保存していたわけではないです。
ブラウザ上の←ボタンで戻った際はページの遷移だけなのでさっきの選択が残っていますが、更新ボタンを押したり、遷移後ページ下の「戻る」ボタンで戻った際は1番上の設定である「朝」が選択されています。
また時間設定を3分間にしていますが、これは問題なく動いており、3分経過すると出力したcookieに保存されている文字は初期設定のnullに戻ります。
プルダウンの内容パラメーターとしてそれを設定出来たら解決すると考えているのですが…。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/11/06 04:36

コードにはファイル毎に「コードのマークダウン」(```だけの行で前後を囲む)をご利用ください。 また、コードのマークダウンの始まりの ``` に ```java とか ```xml とか言語名を付けるとキーワードに色が付いたりしてより見易くなります。
seiran10

2023/11/06 05:17

ご指摘ありがとうございます。 初めて使うので右も左もわからず、わかりにくい質問の仕方をしてしまい申し訳ありません。 後ほど修正させていただきます。
jimbe

2023/11/06 05:42

編集ありがとうございます。 >別のシステムを触った際はループの中にプルダウンの選択関係のソースを書き込んで JSP に値が届いているのなら(その元が保存されたものかは関係ありませんので)それをやれば良いのではないでしょうか。
seiran10

2023/11/06 05:44

今回はCookieを使って取得を行うことが最低限の機能としてシステムを作っています。 似てはいるのですが確実にcookieに情報を保存してそれを利用する方法が知りたいです。
guest

回答1

0

省略されていたりコードがあちこち間違っていたりするので本来は色々処理があるのかもしれませんが、とにかく時間帯の選択 form で選択したものがクッキーに入ってそれが表示されるような状態を作って見ました。

フォワードではなくリダイレクトで、クッキーの保存・再表示をさせています。
(クッキーを取得する static コードは jsp に埋めました。)

index.jsp

html

1<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html> 4<head> 5<meta charset="UTF-8"> 6<title>Cookie Test</title> 7</head> 8<body> 9<% 10//クッキーから timeframe を取得 11int timeframe = 1; //デフォルト 12Cookie[] cookies = request.getCookies(); 13if(cookies != null) { 14 for(Cookie cookie : cookies) { 15 if(cookie.getName().equals("timeframe")) { 16 timeframe = Integer.parseInt(cookie.getValue()); 17 break; 18 } 19 } 20} 21%> 22<form action="TestServlet" method="post"> 23時間: 24<select name="timeframe"> 25 <option value="1"<%if (timeframe == 1) {%> selected<%}%>>朝</option> 26 <option value="2"<%if (timeframe == 2) {%> selected<%}%>>昼</option> 27 <option value="3"<%if (timeframe == 3) {%> selected<%}%>>夜</option> 28</select> 29<input type="submit" value="送信"> 30</form> 31 32</body> 33</html>

TestServlet.java

java

1import java.io.IOException; 2 3import jakarta.servlet.ServletException; 4import jakarta.servlet.http.*; 5 6public class TestServlet extends HttpServlet { 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 8 request.getRequestDispatcher("index.jsp").forward(request, response); 9 } 10 11 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 12 request.setCharacterEncoding("UTF-8"); 13 14 String timeframe = request.getParameter("timeframe"); 15 16 Cookie cookie = new Cookie("timeframe", timeframe); 17 cookie.setMaxAge(60*3); 18 response.addCookie(cookie); 19 20 response.sendRedirect("index.jsp"); 21 } 22}

投稿2023/11/06 07:20

編集2023/11/06 07:27
jimbe

総合スコア13318

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問