私の要件は、2つのエンティティ(UserDetailsとEmploymentDetailsなど)からの入力フィールドを含むJSPのフォームをユーザーに提供することによってCREATE操作を実行することです。
1つの送信を使用して1つのjspで2つのフォームを更新する最も効果的な方法は何ですか?
私が知っているアプローチの1つは、2つのエンティティを1つのラッパークラスに結合してから、そのオブジェクトをModelとして送信することです。それが唯一の解決策ですか?
親切にご案内します。
私の要件は、2つのエンティティ(UserDetailsとEmploymentDetailsなど)からの入力フィールドを含むJSPのフォームをユーザーに提供することによってCREATE操作を実行することです。
1つの送信を使用して1つのjspで2つのフォームを更新する最も効果的な方法は何ですか?
私が知っているアプローチの1つは、2つのエンティティを1つのラッパークラスに結合してから、そのオブジェクトをModelとして送信することです。それが唯一の解決策ですか?
親切にご案内します。
ラッパークラスに任意の数のオブジェクトを配置し、これを使用して単一のフォームでデータを送信するのが一般的な方法です。さらに、JSR-303検証を任意のオブジェクトで使用できます。
public class MyForm {
@Valid
private UserDetails userDetails;
@Valid
private EmploymentDetails employmentDetails;
...
}
あなたのフォーム:
<form:form modelAttribute="myForm" method="post">
<form:input path="userDetails.property1"/>
<form:input path="userDetails.property2"/>
<form:input path="employmentDetails.property1"/>
<input type="submit" value="create"/>
</form:form>
とあなたのコントローラー:
@RequestMapping(value = "/", method = RequestMethod.POST)
public ModelAndView create (@Valid MyForm myForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// here you can retrieve form errors of both objects
}
UserDetails userDetails = myForm.getUserDetails();
EmploymentDetails employmentDetails = myForm.getEmploymentDetails();
...
}
もう1つのアプローチは、JSONを介してオブジェクトを保存することですが、この場合はやり過ぎで複雑すぎると思います。
各オブジェクトを異なるモデル属性にマッピングしてみてください:
public String create(@Valid @ModelAttribute(value="UserDetails") UserDetails userDetails,
@Valid @ModelAttribute(value="EmploymentDetails") EmploymentDetails employmentDetails,
BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest)
{
フォームでは、これらは異なるプレフィックスにバインドする必要があります。
<form:input path="UserDetails.name" />