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

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

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

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1671閲覧

Spring Boot + Thymeleafで動的に生成したURLの再表示方法について

kikirara

総合スコア4

Java

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2023/02/20 05:33

現在Spring boot + Thymeleafで開発をしています。
初心者のため、詳しくご教授頂けると幸いです。

実現したいこと

Thymeleafのth:formactionを使用して動的に生成したURLを同ページの再表示時にも使用したい。

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

最初に表示したHTMLソースでは
formaction="/web-euctools/groupList/G000/update"
とグループIDが表示されているが、再表示時には
formaction="/web-euctools/groupList//update"
のようにグループIDが抜けている

現象

初期表示時は問題なく動作している。
必須入力エラーで、同じ画面が再表示されるときに動的に生成したURLの{groupid}が空になっているので、どのようにしたら{groupid}が引き継がれるかをご教授ください。

該当のソースコード

Java

1 2@Controller 3public class GroupController { 4 @Autowired 5 HttpSession session; 6 @Autowired 7 UserService userService; 8 @Autowired 9 GroupService groupService; 10 11 /** 12 * グループ編集画面を表示 13 * @param id 表示するグループID 14 * @param model Model 15 * @return グループ編集画面 16 */ 17 @GetMapping("/groupList/{groupid}/groupEdit") 18 public String groupEdit(@PathVariable String groupid, Model model) { 19 UsysGroup group = groupService.findById(groupid); 20 GroupDto groupDto = new GroupDto(); 21 groupDto.setGroupid(group.getGroupid()); 22 groupDto.setGroup_name(group.getGroup_name()); 23 model.addAttribute("groupDto", groupDto); 24 return "groupEdit"; 25 } 26 27 /** 28 * グループ更新 29 * @param userRequest リクエストデータ 30 * @param model Model 31 * @return グループ情報詳細画面 32 */ 33 @PostMapping(value = "/groupList/{groupid}/update") 34 @RequestMapping(value = "/groupList/{groupid}/update", method = RequestMethod.POST) 35 public String update(@Validated @ModelAttribute GroupDto groupDto, BindingResult result, Model model){ 36 List<String> errorList = new ArrayList<String>(); 37 if (result.hasErrors()) { 38 for (ObjectError error : result.getAllErrors()) { 39 errorList.add(error.getDefaultMessage()); 40 } 41 model.addAttribute("validationError", errorList); 42 return "groupEdit"; 43 } 44 // グループ情報の更新 45 groupService.update(groupDto); 46 return "redirect:/groupList"; 47 } 48 49 /** 50 * グループ削除 51 * @param userRequest リクエストデータ 52 * @param model Model 53 * @return グループ情報詳細画面 54 */ 55 @GetMapping(value = "/groupList/{groupid}/delete") 56 @PostMapping(value = "/groupList/{groupid}/delete") 57 @RequestMapping(value = "/groupList/{groupid}/delete", method = RequestMethod.POST) 58 public String delete(@Validated @ModelAttribute GroupDto groupDto, Model model) { 59 List<String> errorList = new ArrayList<String>(); 60 List<UsysUser> group = userService.findByGroupid(groupDto.getGroupid()); 61 if (group.size() != 0) { 62 errorList.add("使用されているグループIDです。"); 63 errorList.add("削除する場合は、ユーザ情報のグループを修正してください。"); 64 model.addAttribute("validationError", errorList); 65 return "groupEdit"; 66 } 67 68 // グループ情報の削除 69 groupService.delete(groupDto.getGroupid()); 70 return "redirect:/groupList"; 71 } 72}

HTML

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <link th:href="@{/css/style.css}" rel="stylesheet"> 6 <script th:src="@{/js/common.js}"></script> 7 <title>EUCtools</title> 8<title>グループ編集</title> 9</head> 10<body> 11<div id="Layer0" class="titleArea">&nbsp;</div> 12<div id="Layer1" class="dateArea"><span th:text="${today}"></span></div> 13<div id="Layer2" class="userArea">ログインユーザー:<span th:text="${loginname}"></span></div> 14<div id="Layer3" class="endBtnArea"><a th:href="@{/}"><img src="../../images/btn_logout.gif" alt="ログアウト" class="imgBtn"></a></div> 15<div id="Layer4" class="screenNaviArea"><span>グループ編集画面</span></div> 16<div id="Layer5" class="screenTitleArea1"></div> 17<div id="Layer6" class="screenTitleText"></div> 18<div id="Layer7"><span></span></div> 19<div id="Layer8" class="bodyAreaNew"> 20<div th:if="${validationError}" th:each="error : ${validationError}"> 21 <label class="warning" th:text="${error}"></label> 22</div> 23<form th:object="${groupDto}" th:method="post"> 24 <table cellpadding="0" cellspacing="0"> 25 <col style="width:150px"> 26 <col style="width:250px"> 27 <tr> 28 <td colspan="2" class="spacer"><img src="../../images/spacer.gif" height="20"></td> 29 </tr> 30 <tr> 31 <th>グループID</th> 32 <td colspan=2 class="left"> 33 <p th:text="*{groupid}"></p><input type="hidden" th:field="*{groupid}" th:value="*{groupid}"></input> 34 </td> 35 </tr> 36 <tr> 37 <th>グループ名</th> 38 <td colspan=2 class="left"> 39 <input type="text" size="40" maxlength="30" th:field="*{group_name}" class="inputn"></input> 40 </td> 41 </tr> 42 </table> 43 </div> 44</div> 45<div id="Layer11" class="btnArea"> 46<table> 47<tr> 48<td width="10" class="nonp">&nbsp;</td> 49<td width="110" class="nonp"><input type="image" th:formaction="@{/groupList/{groupid}/update(groupid=*{groupid})}" id ="submit" name="submit" src="../../images/btn_kosin.gif" alt="更新" /></td><td width="10" class="nonp">&nbsp;</td> 50<td width="110" class="nonp"><input type="image" th:formaction="@{/groupList/{groupid}/delete(groupid=*{groupid})}" id ="submit" name="submit" src="../../images/btn_sakujo.gif" alt="削除" /></td><td width="10" class="nonp">&nbsp;</td> 51<td width="110" class="nonp">&nbsp;</td><td width="10" class="nonp">&nbsp;</td> 52<td width="110" class="nonp">&nbsp;</td><td width="10" class="nonp">&nbsp;</td> 53<td width="110" class="nonp">&nbsp;</td><td width="10" class="nonp">&nbsp;</td> 54<td width="110" class="nonp">&nbsp;</td><td width="10" class="nonp">&nbsp;</td> 55<td width="110" class="nonp">&nbsp;</td><td width="10" class="nonp">&nbsp;</td> 56<td width="110" class="nonp">&nbsp;</td><td width="10" class="nonp">&nbsp;</td> 57<td width="110" class="nonp"><a th:href="@{/groupList}"><img src="../../images/btn_modoru.gif" alt="戻る" class="imgBtn"/></a></td><td width="10" class="nonp">&nbsp;</td> 58<td width="10" class="nonp">&nbsp;</td> 59</tr> 60</table> 61</div> 62</form> 63</body> 64</html>

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

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

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

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

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

guest

回答1

0

自己解決

URLの{groupid}を外すことで
自己解決しました。

投稿2023/02/28 05:40

kikirara

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問