Spring MVC アプリケーションで、すべてのページに共通のフォームがある状況に直面しています。そこで、そのフォームを別の jsp ページに取り、そのページを他の jsp ページに含めました。フォームはシンプルです:
<form:form method="POST" commandName="coachingDomain" action="searchForm">
<form:input path="coachingName" placeholder="Search for coaching" />
<button type="submit" value="Search">Search</button>
</form:form>
ここで、アプリケーションを実行すると、サーバーはコントローラーでCoachingDomainのバインディングを見つけることができません。より明確にするために、フォームがページ A1 に存在し、ページ A2 に含まれているとします。A2コントローラーでは、以下のようにcoachingDomainをバインドしています。
@RequestMapping(method = RequestMethod.GET)
public String showPage(ModelMap modelMap, HttpServletRequest request,
HttpServletResponse response) {
modelMap.addAttribute("coachingDomain",
new CoachingDomain());
return "welcome";
}
しかし、バインド エラーは引き続き表示されます。サーバーが最初にA1ページのコントローラーを見つけようとしていたようです。そこで、A1コントローラーを(抽象的に)作成し、A2にA1コントローラーを拡張させました。次に、同じコードを A1 に配置しました。しかし、それでも同じエラーがありました。
私のA1およびA2コントローラーは次のとおりです。
public abstract class A1 {
public void showPage1(ModelMap modelMap, HttpServletRequest request,
HttpServletResponse response) {
System.out.println("A1 called");
modelMap.addAttribute("coachingDomain",
new CoachingDomain());
}
}
@Controller
@RequestMapping(value = "/A2.html")
public class A2 extends A1 {
@RequestMapping(method = RequestMethod.GET)
public String showPage(ModelMap modelMap, HttpServletRequest request,
HttpServletResponse response) {
System.out.println("A2 called");
showPage1(modelMap, request, response);
modelMap.addAttribute("searchCoachingDomain",
new SearchCoachingDomain());
return "A2";
}
}
私のjspページは次のとおりです。
A1.jsp:
<body>
<form:form method="POST" commandName="coachingDomain" action="searchForm">
<form:input path="coachingName" placeholder="Search for coaching" />
<button type="submit" value="Search">Search</button>
</form:form>
</body>
A2.jsp:
<%@include file="/WEB-INF/views/root.jsp"%>
エラーは次のとおりです。
Neither BindingResult nor plain target object for bean name 'coachingDomain' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174)
インターネットに継承の例がありますが、すべてのjspページに共通のフォームを作成する方法を作成できません。私が考える 1 つのアプローチは、送信ボタンを JS 関数にバインドし、必要な URL を呼び出す Javascript を使用することです。しかし、Spring MVC @RequestMapping(method = RequestMethod.POST) 手法を使用して同じことが達成できるかどうかを期待していました。ここで私を提案してください...