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

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

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

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

3113閲覧

JSPがsubmit送信したデータをservletで取得する方法

shafi_bo

総合スコア20

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2017/05/18 06:06

編集2017/05/18 06:27

###前提・実現したいこと

JSPがsubmit送信したデータをservletで取得。
取得するデータは参照型クラスです。

###発生している問題・エラーメッセージ

ソースコード

JSP

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="javax.servlet.ServletContext"%> <%@ page import="category.CategoryList"%> <%@ page import="category.Category"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div align="left"> <h1>ブログ作成</h1> </div> <hr> <div align="center"> <form action="Master" method="post"> <div align="left"> <input type="text" placeholder="タイトル" name="title" size="80"> <p /> <% ServletContext context = this.getServletContext(); CategoryList categoryList = (CategoryList) context.getAttribute("CategoryList"); %> <div align="right"> カテゴリー: <select name="category"> <% for (Category category : categoryList.getList()) { %> <option value=<%=category%>><%=category.getCategoryName()%></option> <% } %> </select> </div> <textarea name="body" cols="60" rows="20"></textarea> </div> <div align="right"> <button type="submit" name="Action" value="create">作成</button> </div> </form> </div> </body> </html>

JavaServlet

package controller; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import model.User; /** * Servlet implementation class MasterController */ @WebServlet("/Master") public class MasterController extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 直接起動防止 RequestDispatcher rd = request.getRequestDispatcher("top.jsp"); rd.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // エンコード request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 処理行動種別 String action = null; // セッション取得 HttpSession session = request.getSession(); // 事前ログインユーザ定義 if (session.getAttribute("User") == null) { User user = new User("admin", "suzukitarou", "suzukin"); session.setAttribute("User", user); } action = request.getParameter("Action"); // form送信 String url = null; if (action == null) { action = "null"; } // 行動別処理 switch (action) { /*執筆系*/ case "write": if (session.getAttribute("User") != null) { url = "write.jsp"; } else { url = "login.jsp"; } break; // case "login": // ログイン処理 // url = "Login"; // ログインコントローラ // String userId = request.getParameter("userid"); // ID取得 // String password = request.getParameter("password"); // パスワード取得 // request.setAttribute("USERID", userId); // ID送信 // request.setAttribute("PASSWORD", password); // パスワード送信 // request.setAttribute("ACTION","login"); // 行動送信 // break; // case "agree": // ログイン完了処理 // url = "successlogin.jsp"; // break; // case "incongruous": // ログイン失敗処理 // request.setAttribute("REASON", "incongruous"); // // url = "failurelogin.jsp"; // break; // case "prev": // 戻る // url = "top.jsp"; // break; // case "goLogin": // ログイン画面に移動 // url = "login.jsp"; // break; case "create": // タイトル取得 String title = request.getParameter("title"); // 本文取得 String body = request.getParameter("body"); // カテゴリー取得 // Category category = request.getParameterValues("Category"); //Category category = (Category)request.getAttribute("category"); // データの送信準備 request.setAttribute("Title", title); request.setAttribute("Body", body); request.setAttribute("Category", category); url = "valuetest.jsp"; break; default: // 予想とした処理と違うものが入ってきた場合 url = "top.jsp"; break; } // 画面遷移 RequestDispatcher rd = request.getRequestDispatcher(url); rd.forward(request, response); } }

###試したこと

getParameter()では文字列型しか取れず、
getAttribute()ではsubmit送信では送れなかった。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

参照型クラスのデータを取得するにはどうすればよいでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

一応自己解決できましたが、引き続き募集しています。

自己解決方法は、JSP側の

カテゴリー: <select name="Category"> <% for (Category category : categoryList.getList()) { %> <option value=<%=category.getCategoryId()%>,<%=category.getCategoryName() %>><%=category.getCategoryName()%></option> <% } %> </select>

として
Categoryクラスのフィールドを個別にvalueに入れて
Servlet側を

// カテゴリ取得 String cate = request.getParameter("Category"); String[] categories = cate.split(",", 0); Category category = new Category(categories[0], categories[1]);

splitで取り出すようにしました。
スマートではない気がしたので(クラス内のフィールドが増えた場合に変更する点が多くて)
何か良い方法ないでしょうか?

投稿2017/05/18 07:02

shafi_bo

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問