私はThymeleafでSpringBootを使用して、2つのテクノロジーを学ぶのに役立つ簡単な例を作成しています。Thymeleaf with SpringBoot - モデルをループして削除するには?
私は、エンティティは、IDとコンテンツを持って挨拶ですTHIS GUIDE
に私の例を基づかています。
挨拶を作成して、私が作成したすべての挨拶を表示することができます。
次に、リストページの各グリーティングに対して削除オプションを追加するとします。削除をクリックすると、オブジェクトが削除され、リストページが再度表示されます。
ああ、私はリストページをロードするとき、私はこのエラーを取得:
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'greeting' available as request attribute
コントローラとレポジトリオブジェクト
@Controller
public class GreetingController {
@Autowired
GreetingRepo gr;
@RequestMapping(value="/greeting/list", method=RequestMethod.GET)
public String greetingsForm(Model model) {
model.addAttribute("greetings", gr.findAll());
return "greeting/list";
}
@RequestMapping(value="/greeting/delete", method=RequestMethod.POST)
public String deleteGreeting(@ModelAttribute("greeting") Greeting greeting) {
gr.delete(greeting);
return "redirect:/greeting/list";
}
}
@RepositoryRestResource
interface GreetingRepo extends JpaRepository<Greeting, Long> {
}
するlist.htmlページ:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<div th:each="greeting : ${greetings}">
<p th:text="'id: ' + ${greeting.id}" />
<p th:text="'content: ' + ${greeting.content}" />
<form action="#" th:action="@{/greeting/delete}" th:object="${greeting}" method="post">
<input type="hidden" th:field="*{id}"/>
<input type="hidden" th:field="*{content}"/>
<input type="Submit" value="Delete"/>
</form>
</div>
<a href="/greeting/add">Add another</a>
<a href="/greeting/list">Show All</a>
</body>
</html>
ここで正しい方向にプッシュする:-)
Thanks Hasitha、これはエラーを回避しましたが、Greetingオブジェクトはコントローラのdeleteメソッドに到着したときにインスタンス化されません。私。私が何をクリックしても、idは常に0です。 また、実際のオブジェクトが既にモデルに入っているときに、モデルに空のオブジェクトを追加する必要があるのは不思議です。私。 'greeting ** s **'オブジェクトはすべての 'greeting'オブジェクトを含むリストです。私は、現在の反復(挨拶)変数を入れ子になった削除フォームで使用できると思いましたか? – MooMoo