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

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

新規登録して質問してみよう
ただいま回答率
85.32%
Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

JSP

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

Java

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

Spring

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

Q&A

1回答

315閲覧

【Spring】画面遷移ができない

tofu_se

総合スコア0

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

JSP

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

Java

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

Spring

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

0グッド

0クリップ

投稿2024/11/30 13:28

実現したいこと

初期画面(init.jsp)で明細追加ボタン押下時に明細追加画面(add.jsp)に遷移するようにしたいです。

発生している問題・分からないこと

現状では明細追加ボタンを押下すると初期画面のまま何も変わりません。

該当のソースコード

SalesSystemController.java

1package jp.practice.sales; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.ui.Model; 5import org.springframework.web.bind.annotation.RequestMapping; 6 7/** 8 * Handles requests for the application home page. 9 */ 10@Controller 11@RequestMapping(value = "/system") 12public class SalesSystemController { 13 14 @RequestMapping(value = "/start") 15 public String init(SalesForm form, Model model) { 16 model.addAttribute("itemList", RecordManager.getNameList()); 17 return "init"; 18 } 19 20 @RequestMapping(params = "add") 21 public String add(SalesForm form, Model model) { 22 // 商品名をセッションに格納する 23 model.addAttribute("itemList", RecordManager.getNameList()); 24 // フォームから受け取った商品データの商品名でリストを検索する 25 Item item = RecordManager.findItem(form.getGoodsName()); 26 // 選択された商品を売上明細リストに追加 27 form.addToAllList(item); 28 // 商品の全データを取得し、セッションに格納する 29 model.addAttribute("allList", form.getAllList()); 30 return "add"; 31 } 32 33 @RequestMapping(params = "toInit") 34 public String toInit(SalesForm form, Model model) { 35 // セッションに商品名リストを格納する 36 model.addAttribute("itemList", RecordManager.getNameList()); 37 return "init"; 38 } 39 40}

init.jsp

1<%@ page session="false" language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 4<html> 5<head> 6 <title>Home</title> 7</head> 8<body> 9<p> 10 初期画面 11</p> 12<form:form modelAttribute="salesForm" aciton="/sales/system"> 13 <form:select path="goodsName" items="${itemList}" /> 14 <input type="submit" name="add" value="明細追加" /> 15</form:form> 16</body> 17</html>

add.jsp

1<%@ page session="false" language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 2<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 4<html> 5<head> 6 <title>Home</title> 7</head> 8<body> 9<p> 10 明細追加画面 11</p> 12<form:form modelAttribute="salesForm" action="/sales/system"> 13 <form:select path="goodsName" items="${itemList}" /> 14 <input type="submit" name="add" value="明細追加" /> 15</form:form> 16<table> 17 <tr><th>商品ID</th><th>商品名</th><th>単価</th><th>点数</th><th>小計</th></tr> 18 <c:forEach items="${allList}" var="list"> 19 <tr> 20 <td>${list.id}</td> 21 <td>${list.name}</td> 22 <td>${list.price}</td> 23 <td>${list.quantity}</td> 24 <td>${list.subtotal}</td> 25 </tr> 26 </c:forEach> 27</table> 28 29</body> 30</html>

RecordManager.java

1package jp.practice.sales; 2 3import java.util.ArrayList; 4import java.util.List; 5 6/** 7 * 商品データ全体を保持するクラス 8 */ 9public final class RecordManager { 10 11 /** 商品データ */ 12 private static List<Item> list = new ArrayList<>(); 13 14 static { 15 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 16 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 17 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 18 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 19 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); 20 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); 21 list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); 22 list.add(new Item("B00301", "領収書", 350, 0, 0)); 23 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); 24 list.add(new Item("C00201", "ステープラー", 338, 0, 0)); 25 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); 26 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); 27 list.add(new Item("C00501", "消しゴム", 58, 0, 0)); 28 } 29 30 /** 31 * 引数で指定された商品名に一致する商品データを返却 32 * @param name 検索キーとなる商品名 33 * @return 検索結果の商品データ 34 */ 35 public static Item findItem(String goodsName) { 36 for (Item item : list) { 37 if (item.getName().equals(goodsName)) { 38 return item; 39 } 40 } 41 return null; 42 } 43 44 /** 45 * 商品名のリストを返却 46 * @return 商品名リスト 47 */ 48 public static List<String> getNameList() { 49 List<String> nameList = new ArrayList<String>(); 50 // リストのサイズ分繰り返す 51 for (int i = 0; i < list.size(); i++) { 52 // 商品名をリストに格納する 53 nameList.add(list.get(i).getName()); 54 } 55 return nameList; 56 } 57 58 /** 59 * 全商品のデータを返却 60 * @return 商品リスト 61 */ 62 public static List<Item> getAllList() { 63 return list; 64 } 65}

SalesForm.java

1package jp.practice.sales; 2 3import java.util.List; 4 5public class SalesForm { 6 7 private String goodsName; // 商品名 8 private int point; // 商品点数 9 private int delNumber; // 削除番号 10 private List<Item> allList; //売上明細リスト 11 12 public SalesForm() { 13 14 } 15 16 /** 17 * @return goodsName 18 */ 19 public String getGoodsName() { 20 return goodsName; 21 } 22 23 /** 24 * @param goodsName セットする goodsName 25 */ 26 public void setGoodsName(String goodsName) { 27 this.goodsName = goodsName; 28 } 29 30 /** 31 * @return point 32 */ 33 public int getPoint() { 34 return point; 35 } 36 37 /** 38 * @param point セットする point 39 */ 40 public void setPoint(int point) { 41 this.point = point; 42 } 43 44 /** 45 * @return delNumber 46 */ 47 public int getDelNumber() { 48 return delNumber; 49 } 50 51 /** 52 * @param delNumber セットする delNumber 53 */ 54 public void setDelNumber(int delNumber) { 55 this.delNumber = delNumber; 56 } 57 58 /** 59 * @return 全売上明細 60 */ 61 public List<Item> getAllList() { 62 return allList; 63 } 64 65 /** 66 * @param 1件の商品情報 67 * @return 売上明細リスト 68 */ 69 public List<Item> addToAllList (Item item) { 70 allList.add(item); 71 return allList; 72 } 73}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

formタグのaciton属性やスペルにミスがないか確認したのですが、私の知識では解決できませんでした。
お知恵を貸していただけないでしょうか。

補足

特になし

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

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

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

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

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

frank58richard

2025/02/07 08:20

問題を解決するために、以下の点を確認してみてください: スペルの修正: init.jsp の <form> タグの aciton 属性を action に修正してください。 Spring Controller のマッピング: 現在、明細追加ボタンを押しても何も起こらないのは、おそらくリクエストが正しく処理されていないためです。SalesSystemController クラスのマッピングを見直し、@RequestMapping(params = "add") の代わりに @RequestMapping(value = "/add", method = RequestMethod.POST) を試してみてください。 package jp.practice.sales; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping(value = "/system") public class SalesSystemController { @RequestMapping(value = "/start", method = RequestMethod.GET) public String init(SalesForm form, Model model) { model.addAttribute("itemList", RecordManager.getNameList()); return "init"; } @RequestMapping(value = "/add", method = RequestMethod.POST) public String add(SalesForm form, Model model) { model.addAttribute("itemList", RecordManager.getNameList()); Item item = RecordManager.findItem(form.getGoodsName()); form.addToAllList(item); model.addAttribute("allList", form.getAllList()); return "add"; } @RequestMapping(value = "/init", method = RequestMethod.GET) public String toInit(SalesForm form, Model model) { model.addAttribute("itemList", RecordManager.getNameList()); return "init"; } } フォームの設定: init.jsp と add.jsp のフォームの設定も、action 属性を修正してください。また、modelAttribute の値がコントローラのフォームと一致していることを確認してください。 <!-- init.jsp --> <form:form modelAttribute="salesForm" action="/sales/system/add" method="post"> <form:select path="goodsName" items="${itemList}" /> <input type="submit" value="明細追加" /> </form:form> <!-- add.jsp --> <form:form modelAttribute="salesForm" action="/sales/system/add" method="post"> <form:select path="goodsName" items="${itemList}" /> <input type="submit" value="明細追加" /> </form:form>
jimbe

2025/02/07 17:42

ここは質問書へ質問するためのコメント欄で、コードを書くにも適切ではありません。 回答欄を利用した方が良いと思います。
dodox86

2025/02/07 23:22

@jimbeさん、ならびに閲覧者の皆さま あくまでユーザー名や文体からの私の推測ですが、最近増えているAI回答、コメントだと思われます。内容が全て間違っているとは言えない例が多いだけに、悩ましいですね。後になって宣伝用URLが埋め込まれることもしばしばです。AI回答ではないのであれば、投稿者ご本人からぜひ否定してほしいものです。
jimbe

2025/02/08 04:33

私も最初通報しようかと思いましたが、それらしいリンクは無さそうでしたしコメントなら間違って踏むことも無いと思って前記のような形になりました。
guest

回答1

0

問題解決のヒントをお届けします。まず、現在の状況では以下の点が考えられます。

  1. aciton属性のスペルミス

init.jspのform:formタグ内で、aciton="/sales/system"と記載されていますが、正しくはaction="/sales/system"であるべきです。このスペルミスが原因でリクエストが正しく送信されず、初期画面のままになっている可能性が高いです。

修正後のコード例:

html
<form:form modelAttribute="salesForm" action="/sales/system">
<form:select path="goodsName" items="${itemList}" />
<input type="submit" name="add" value="明細追加" />
</form:form>
2. コントローラーのリクエストマッピング
現在add.jsp画面への遷移は、以下のメソッドで処理されることを想定しています。

java
@RequestMapping(params = "add")
public String add(SalesForm form, Model model) {
...
return "add";
}
ただし、init.jspで送信されるリクエストが適切にaddというパラメータを渡していることを確認する必要があります。HTML側で対応するパラメータが送信されているか、Springで受け取れているかをチェックしてください。

例えば、以下のようにボタンでname="add"が設定されているため、この設定が正しいです。

html
<input type="submit" name="add" value="明細追加" />
3. フォームのリクエストハンドリング
Spring MVCでは、paramsを利用したリクエスト条件が正しく認識されない場合もあります。その場合、リクエストマッピングをより明確に記述することで問題を回避できることがあります。

例:

java
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(SalesForm form, Model model) {
...
return "add";
}
または、デバッグとしてaddメソッド内でログを追加して、リクエストが正しく渡っているかを確認することも有効です。

java
System.out.println("Add method called with: " + form.getGoodsName());
4. Springフォームデータバインディングの確認
SalesFormのデータが正しくバインドされていない場合も考えられます。SalesFormクラスに適切な@ModelAttributeアノテーションが付与されているか、フォームのmodelAttributeが対応しているか確認してください。

例:

java
@ModelAttribute("salesForm")
public SalesForm initForm() {
return new SalesForm();
}
5. セッションの問題
もしフォームデータやリストが正しく渡っていない場合、セッション管理が原因の可能性もあります。その場合、HttpSessionを使うか、セッションスコープの設定を確認すると良いでしょう。

投稿2025/03/13 04:25

amy18sanchez

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問