0

SpringMVC3.1を使用してJavaWebアプリを開発しています。2つのペアのラジオボタン、入力フィールド、およびドロップダウン選択ボックスがあるJSPがあります。これらの値を、モデルクラスのフィールドを介してマップされたコントローラーで使用できるようにする必要があります。

以前にデバッガーで見たように、セキュリティとURLマッピングは正常に機能します。問題は、モデルにデータを入力するJSPデータ値を取得しようとすると、エラーが発生することです。

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'cccForm' available as request attribute

これが私のJSPの一部です:

<c:url var="cccUrl" value="/registers/default/ccPreauth/authorize" />
    <div class="mainWrapper">
    <form:form id="cccForm" action="${cccUrl}" method="post" modelAttribute="cccForm">
  ...
<table>
    <tbody>
        <tr>
            <th>Select an option.</th>
        </tr>
        <tr>
            <td>
                <div class="field-input">
                    <form:radiobutton id="paymentOption" path="paymentOption" value="authorizeCC" />
                    Collect Credit Card Information
                </div>
                <div class="field-input">
                    Authorization Amount $
                    <form:input path="authAmount" maxlength="10" size="10" class="extendWidth"/> 
                    <span class="instructions">
                        <spring:message code="label.authorization.note" />
                    </span>
                </div>
                <div class="field-input">
                    <form:radiobutton id="paymentOption" path="paymentOption" value="cancelAuth" />
                    Choose a Reason and Cancel Credit Card Collection
                </div>
                <div class="field-input right">
                    <form:select id="selectedReason" path="selectedReason" >
                        <c:forEach items="${reasonList}" var="reason">
                            <option value=${reason.reasonText}>${reason.reasonText}</option>
                            <br />
                        </c:forEach>
                    </form:select>
                </div></td>
        </tr>
    </tbody>
</table>
</div>
<div class="right">
<button class="btnBlue" id="submitButton" type="submit">

これが私のコントローラーの一部です:

    @Controller
@RequestMapping(value = "/registers/default/ccPreauth")
@SessionAttributes(ControllerConstants.DEFAULT_REGISTER_ATTR_NM)
public class CCCaptureController {

...
    @RequestMapping(value="/authorize" )
public ModelAndView authorize(
         final Authentication auth,
         final @ModelAttribute("ccCapturePaymentRequest") CCCapturePaymentForm ccCapturePaymentRequest,
         final BindingResult result,
         final HttpServletResponse response) {

      final ModelAndView mav = new ModelAndView(CC_PREAUTH_PAYMENT_VIEW);

      return mav;
}

そして最後に、これが私のモデルクラスです:

    public class CCCapturePaymentForm implements Serializable {

    private static final long serialVersionUID = 6839171190322687142L;
    @NumberFormat(style = Style.CURRENCY)
    private BigDecimal  authAmount;
    private String      selectedReason;
    private String      paymentOption;

    public BigDecimal getAuthAmount() {
        return authAmount;
    }

    public void setAuthAmount(BigDecimal authAmount) {
        this.authAmount = authAmount;
    }

    public String getSelectedReason() {
        return selectedReason;
    }

    public void setSelectedReason(String selectedReason) {
        this.selectedReason = selectedReason;
    }

    public String getPaymentOption() {
        return paymentOption;
    }

    public void setPaymentOption(String paymentOption) {
        this.paymentOption = paymentOption;
    }

}

これを正しく機能させるために必要なものを誰かに教えてもらえますか?上記の例外の理由だけにとどまらないでください。いつものようにスケジュールが厳しく、Spring MVCの経験がほとんどないため、コードを確認して修正してください。ありがとう!

4

2 に答える 2

2

あなたはあなたの形でこれを持っています:

modelAttribute="cccForm"

したがって、これをコントローラーに含める必要があります。

@ModelAttribute("cccForm") CCCapturePaymentForm ccCapturePaymentRequest

これが、フォームバッキングオブジェクトをmodel属性にバインドする方法です。

于 2012-10-06T22:04:40.510 に答える
0

私はそれらのSpringMVC初心者のための答えを見つけました...

「cccForm」をコントローラー検索メソッド内の次のページのフォームの新しいインスタンスに設定する必要がありました(その後、エラーが発生したページを表示しようとします)。

簡単に言うと、後続のメソッドとJSPページで機能するように、前のコントローラーメソッドで空のバッキングBean値を設定する必要がありました。

これが他の誰かが私の間違いを避けるのに役立つことを願っています。マーク

于 2012-10-09T12:24:06.590 に答える