2017-04-07 1 views
0

私は、すべてのユーザーからのフィードバックを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になります。誰もがこれで私を案内してくれますか?

答えて

1

Thymeleafでフォーム内のリストを使用するには少し難解ですが、具体的な構文を使用する必要があります。ここでは例を示します。

<tr th:each="feedback : ${feedbacklist.myfbList}"> 
    <td th:field="*{myfbList[__${feedbackStat.index}__].message}">The 
     first name 
    </td> 
    ...//Same for others fields 
</tr> 

はthymeleafであなたはあなたが「*」表記を使用する必要がオブジェクト内の通常のフィールドとしても、値を設定したい場所の配列位置を言うために統計オブジェクトを使用する必要があります。

+0

こんにちは@cralfaro、返信いただきありがとうございます。実際に私は自分のコードでかなりの間違いを犯していました。まず、Feedback.javaと同じフィールドを持つ単純なPOJOクラスのFeedbackPOJO.javaという別のクラスを作成しました。また、私のallfeedbacks.htmlはかなり間違っていた。私はhttp://stackoverflow.com/a/36522177/5105263で与えられた答えに続き、私の問題の約90%を解決するのに役立ちました。私はまだドロップダウンを適切に統合する方法を見つけ出しておらず、数日で更新されたコードを投稿します。ありがとう!! –

+0

@SaurabhGourは次の質問をするときに私にメッセージを送ってくれます。もし私が助けることができるなら、私は見るでしょう – cralfaro

+0

確かに..ありがとう!! –

関連する問題