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

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

ただいまの
回答率

90.61%

  • MySQL

    5701questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Eclipse

    1641questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Spring

    666questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

SpringMVC @PathVariableで取得したパラメータをSQLに組み込む方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 413
退会済みユーザー

退会済みユーザー

前提・実現したいこと

Springを使ってWEBアプリケーションを作成しています。
@PathVariableを使ってURLのパラメータを取得し、SQLに組み込みたいと考えています。

top.jsp

<!DOCTYPE html>

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>

<html>
<head>
<title>投票ツール</title>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/style.css" />" rel="stylesheet">
</head>
<body>
    <table>
        <c:forEach var="column" items="${tbl}">
        <tr>
            <td><a href="<c:url value = '/vote' />"><c:out value="${column.name}" /></a></td>
            <td><c:out value="${column.start}" /></td>
            <td><c:out value="${column.end}" /></td>
            <td><a href="<c:url value = '/delete${column.id}' />">削除</a></td>
        </tr>
        </c:forEach>
    </table>
    </div>
</body>
</html>

delete.jsp

<!DOCTYPE html>

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>

<html>
<head>
<title>投票ツール</title>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/style.css" />" rel="stylesheet">
</head>
<body>
    <table>
        <c:forEach var="column" items="${tbl}">
            <tr>
                <th>トピック名</th>
                <td><input type="text" id="name" name="name" value="${column.name}" size="40" readonly></td>
            </tr>
            <tr>
                <th>概要</th>
                <td><pre><textarea id="about" name="about" rows="15" cols="50" readonly>${column.about}</textarea></pre></td>
            </tr>
            <tr>
                <th>候補者</th>
                <td><input type="text" id="kouho" name="kouho" value="${column.kouho}" size="40" readonly></td>
            </tr>
            <tr>
                <th>投票開始日</th>
                <td><input type="text" id="start" name="start" value="${column.start}" size="15" readonly></td>
            </tr>
            <tr>
                <th>投票終了日</th>
                <td><input type="text" id="end" name="end" value="${column.end}" size="15" readonly></td>
            </tr>
        </c:forEach>
    </table>
    <div>
        <input type="submit" value="削除">
        <input type="button" value="戻る" onClick="history.back()">
    </div>
</body>
</html>

HomeController.java

@Controller
public class HomeController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    private static final String SELECT_SQL =
            "SELECT id,name,start,end FROM topic";

    private static final String SELECT_WHERE_SQL =
            "SELECT name, about, kouho, start, end FROM topic WHERE ;


    @RequestMapping(value = "/top", method = RequestMethod.GET)
    public String top(Model model) {

        List<Map<String, Object>> topicList = jdbcTemplate.queryForList(SELECT_SQL);

        model.addAttribute("tbl", topicList);

        return "top";
    }

    @RequestMapping(value = "/delete{id}", method = RequestMethod.GET)
    public String delete(Model model, @PathVariable int id) {

        List<Map<String, Object>> delete = jdbcTemplate.queryForList(SELECT_WHERE_SQL);

        model.addAttribute("tbl", delete);

        return "delete";
    }
}

補足情報

PathVariableで取得したパラメータをSQL文のWHERE句に組み込み、top.jspで削除を押下した際に、delete.jspにてDBから取得してくる値を変えたいと思っています。

top.jspにて、idをhiddenでコントローラに渡してWHERE句に組み込むやり方もためしてみましたがうまくいきませんでした。

何卒、よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

@PathVariable は文字通り、パスの値を変数に格納するものですから、パスとして区切らなければいけません。

/delete${column.id} と同じパスにidを指定していますが、@PathVariableを使う場合には、

/delete/${column.id} とリソース指定した上で、

@RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
    public String delete(Model model, @PathVariable int id) {

と記述するものです。

Springの公式サイトでも解説はありますが、SpringMVCを使ったRESTサービスの構築については、indexnext |previous |TERASOLUNA Global Framework Development Guideline に詳細な例とともに紹介されています。

あと余談ですが、SELECT_WHERE_SQL の値が途中で終わっているようです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/25 11:43

    回答ありがとうございます。

    SELECT_WHERE_SQL のWHERE句にidを組み込みたいのですが、書き方は
    "SELECT name, about, kouho, start, end FROM topic WHERE id = id;
    でよかったでしょうか?

    キャンセル

  • 2017/09/25 13:46

    JDBCTemplateにパラメータを渡して検索する方法は、jdbcTemplate プレースホルダ で検索すると色々と参考になるサイトがありますので最適なものを選ぶと良いでしょう。http://www.techscore.com/tech/Java/Others/Spring/5-3/

    キャンセル

  • 2017/09/25 15:49

    色々と調べてやってみます。ありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    forEach文でcheckboxをだすときに

    jspで、forEach文でcheckboxを出すとnameが同じになるので配列でパラメーターを受け取ります。 そのときチェックされたものが配列の[0]から入ってしまいますが、も

  • 解決済

    Strutsのbean:writeについて

    現在、Strutsを使用しアプリケーションを作成しています。 JSPでActionForm内に入っているString型の値を<bean:write~>を使用し表示しています。

  • 解決済

    JSPのforEach内の表の要素に連番(変数)のIDを振りたい

    forEachを使って、下記のような10行の表を作っています。 この方法だとidの値は10行全て同じになってしまうと思いますが、 idの値を10行全て変える方法はありますでしょうか

  • 解決済

    org.h2.jdbc.JdbcSQLException: "DATE" 定数を解析できませんについ...

    Date型の日時をjspで表示させる方法と入力元と入力先の方を同じにする方法がわかりません。 現在、入力元がDate型、入力先がString型になっています。 回答よろしくお願いし

  • 解決済

    jsp splitタグの対象文字列に変数を使う

    前提・実現したいこと タイトルの通り、jstlのsplitタグの文字列に変数を使いたいです。 Controller.java @Controller public class

  • 解決済

    SpringMVC hiddenを使って値をJSPからJSPに渡す。

    前提・実現したいこと SpringMVCを使ってWEBアプリケーションを作っています。 ラジオボタンで選択した項目を、hiddenを使って渡したいです。 Controlle

  • 解決済

    [Spring] 再表示時のリスト選択値について

    spring での開発で、画面再表示時のリストボックスの初期選択がされなくて困っています。 色々試してみましたが、答えが見つけられませんでした。 お力添えお願い致します。 リス

  • 解決済

    SPRING MVC form:selectにて表示されない。

    上記状態で実行をしても実際のページでは  前提・実現したいこと SPRING MVC form:selectにて実行をするが <select~に変わらずそのまま出力されてしまう

同じタグがついた質問を見る

  • MySQL

    5701questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Eclipse

    1641questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Spring

    666questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。