0

春の検証フレームワークを使用して、1 つのアクションで 2 つのモデル属性を検証しようとしています。目的は、[検索] ボタンのクリック時に lookUpbean (検索基準) を検証し、サービスから取得した結果の Bean (つまり memberShipbean) を検証して、結果の一部のフィールドが空の場合にユーザーに警告を表示できるようにすることです。豆。

<form:form method="POST" modelAttribute="lookupPageBean" id="lookupForm" name="lookupForm" 
action="lookupMembership.htm">

   <td class="error">
  <form:errors path="membershipNumber" />   

  <form:input class="medium-textbox" id="membershipNumber" path="membershipNumber" />

  <button type="submit" class="Active-button-small">

  <fmt:message key="button.go" />
  </button>`


@RequestMapping(method = RequestMethod.POST, value = URLMappingConstant.MEMBERSHIP_LOOKUP)

public String viewMembership(ModelMap modelMap, HttpServletRequest request, HttpServletResponse   response,

@ModelAttribute(UIConstant.LOOKUP_PAGE_BEAN) LookupPageBean lookupPageBean, BindingResult result,

@ModelAttribute(UIConstant.MEMBERSHIP_BEAN) MembershipPageBean membershipPageBean, BindingResult error) throws WebMTracksException 
{
 membershipValidator.validate(lookupPageBean, result);
membershipValidator.validate(membershipPageBean, error);

}

ここで何が起こっているかというと、最初の検証は正常に機能していますが、2 番目の検証では結果の jsp にエラー メッセージは表示されませんが、「エラー」バインディングの結果でこのコントローラー レイヤーまでエラーが報告されます。

検証レイヤーにも

 ValidationUtils.rejectIfEmpty(errors, UIConstant.BUSINESSNAME,ValidationMSGConstants.BUSINESS_NAME)

このメソッドは、フィールドが空でない場合でも常に検証エラーを返します。

最初の質問は、1 つのアクションで複数のモデル属性を使用できるかどうかです。私はインターネットのどこかでそれを読みましたが、同じ実装を見つけることができませんでした。この問題を解決するのを手伝ってください。また、この問題に対して他に有効な解決策があれば教えてください。ただし、アプリケーションの既存の設計を維持するのに役立つため、両方の検証にはスプリング フレームワークのみを使用したいと思います。

4

1 に答える 1

0

複数のモデル属性を同じフォームにバインドしているとは思いません。それがあなたが求めていることだと思います。特に名前が重複している場合、Spring がすべての Bean のプロパティのもつれを解消する方法を持っているとは思わないため、HTTP の観点からその要求がどのように見えるかさえわかりません。検討したいことは、LookupPageBean と MembershipPageBean を 1 つの「フォーム Bean」にラップすることです。

エラー メッセージについては、spring:bindタグを参照してください。2 番目のモデル属性からバインディング エラーを取得するために必要なことを実行できます。

于 2013-03-19T11:23:17.847 に答える