私は、すべてのユーザーからのフィードバックをUIに入力するThymeleafで動的フォームを作成しました。このフォームは、コントローラのGET APIがヒットしたときに最初に呼び出されます。同様に関連するコードを以下に示す:基本的に私は2つの豆、いずれかを作成しているSpring BootとThymeleafを使用して動的に作成されたフォームで更新された値を取得できません
<h2>Dynamic form</h2>
<form action="#" th:action="@{/updatefb}" th:object="${feedbacklist}"
method="post">
<table>
<tr>
<th>Message</th>
<th>Status</th>
<th>Comments</th>
</tr>
<tr th:each="feedback : ${feedbacklist.myfbList}">
<td th:text="${feedback.message}" th:field="${feedback.message}">The
first name</td>
<td><select>
<option value="Pending"
th:selected="${feedback.status == 'Pending'}">Pending</option>
<option value="In Process"
th:selected="${feedback.status == 'In Process'}">In
Process</option>
<option value="Done" th:selected="${feedback.status == 'Done'}">Done</option>
</select></td>
<td><input type="text" placeholder="Enter Comment Here"
name="comments" th:text="${feedback.comment}"
th:field="${feedback.comment}" /></td>
</tr>
</table>
<button type="submit">Submit</button>
</form>
allfeedbacks.html
他方はながらFeedback.java豆でありますFeedbackList.java beanです。そのためのコードは以下の通りです:Feedback.java
@Entity @Table(name = "feedback") public class Feedback implements Serializable { private static final long serialVersionUID = -3009157732242241606L; @Id private String id; public String getId() { return id; } public String getMessage() { return message; } public String getStatus() { return status; } public String getComment() { return comment; } @Column(name = "message") private String message; @Column(name = "status") private String status; @Column(name = "comment") private String comment; public Feedback() { } public Feedback(String message, String status) { this.message = message; this.status = status; this.id = UUID.randomUUID().toString(); }
FeedbackList.java
public class FeedbackList { ArrayList<Feedback> myfbList; public ArrayList<Feedback> getMyfbList() { return myfbList; } public void setMyfbList(ArrayList<Feedback> myfbList) { this.myfbList = myfbList; } }
私のコントローラクラスから関連するコードは次のとおりです。
@RequestMapping(value = "/getAll", method = RequestMethod.GET) public String getAllFeedbacks(@Valid FeedbackList feedbacklist, BindingResult bindingResult, Model model) { ArrayList<Feedback> fbarray = new ArrayList<>(); for (Feedback fb : repository.findAll()) { fbarray.add(fb); } feedbacklist.setMyfbList(fbarray); model.addAttribute("feedback", new Feedback()); model.addAttribute("feedbacklist", feedbacklist); return "allfeedbacks"; } @RequestMapping(value = "/updatefb", method = RequestMethod.POST) public String updatefbStatus(@Valid FeedbackList feedbacklist, BindingResult bindingResult, Model model) { //feedbacklist is coming as NULL below for (Feedback fb : feedbacklist.getMyfbList()) { System.out.println(fb.getComment()); System.out.println(fb.getMessage()); System.out.println(fb.getStatus()); } // Code to update the database with the new status and comment would go // here return "result"; }
Getリクエストを発生させると、UIでフォームが適切にレンダリングされていますが、フォームに変更を加えて送信すると(POST)、feedbacklistがNULLになります。誰もがこれで私を案内してくれますか?
こんにちは@cralfaro、返信いただきありがとうございます。実際に私は自分のコードでかなりの間違いを犯していました。まず、Feedback.javaと同じフィールドを持つ単純なPOJOクラスのFeedbackPOJO.javaという別のクラスを作成しました。また、私のallfeedbacks.htmlはかなり間違っていた。私はhttp://stackoverflow.com/a/36522177/5105263で与えられた答えに続き、私の問題の約90%を解決するのに役立ちました。私はまだドロップダウンを適切に統合する方法を見つけ出しておらず、数日で更新されたコードを投稿します。ありがとう!! –
@SaurabhGourは次の質問をするときに私にメッセージを送ってくれます。もし私が助けることができるなら、私は見るでしょう – cralfaro
確かに..ありがとう!! –