Недопустимое свойство ‘redeemVoucherForm’ класса bean [my.testapp.forms.RedeemVoucherForm]

#java #jsp #spring-mvc

#java #jsp #spring-mvc

Вопрос:

Я получаю сообщение об ошибке:

 Invalid property 'redeemVoucherForm' of bean class [my.testapp.forms.RedeemVoucherForm]: Bean property 'redeemVoucherForm' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
  

RedeemVoucherForm.java:

 package my.testapp.forms;

public class RedeemVoucherForm {

    private String voucherCode;

    public String getVoucherCode() {
        return voucherCode;
    }

    public void setVoucherCode(String voucherCode) {
        this.voucherCode = voucherCode;
    }
}
  

В моем PageController.java случае я добавляю модель redeemVoucherForm , которая существует, когда я вызываю метод model.containsAttribute(«redeemVoucherForm»):

 @RequestMapping(method = RequestMethod.GET)
public String showPage(final Model model) {
    ...
    model.addAttribute("redeemVoucherForm", new RedeemVoucherForm());
    ...
    return REDIRECT_PAGE_URL;
}

@RequestMapping(value = "/redeem-voucher", method = RequestMethod.POST)
public String redeemVoucher(@Valid final RedeemVoucherForm redeemVoucherForm, final BindingResult bindingResult, final RedirectAttributes redirectModel, final Model model, HttpServletRequest request) {
    LOG.debug("<POST> Redeeming voucher...");

    return REDIRECT_PAGE_URL;
}
  

pageDisplay.jsp:

 <c:url value="/page/redeem-voucher" var="redeemVoucherAction" />
<form:form action="${redeemVoucherAction}" method="post" commandName="redeemVoucherForm">
        <form:input cssClass="form-control" type="text" path="redeemVoucherForm.voucherCode"/>
        <button type="submit" class="btn btn-primary btn-block checkoutButton">
            <spring:theme text="Redeem Voucher"/>
        </button>
</form:form>
  

Что еще я мог пропустить, когда я установил модель redeemVoucherForm ?

Ответ №1:

Я считаю, что эта строка

     <form:input cssClass="form-control" type="text" path="redeemVoucherForm.voucherCode"/>
  

должно быть

     <form:input cssClass="form-control" type="text" path="voucherCode"/>
  

path Элемент a <form:input> должен быть относительно объекта, который вы установили в качестве commandName своего <form:form> . В вашем случае этот объект является экземпляром вашего класса RedeemVoucherForm .

Если вы задаете путь к redeemVoucherForm.voucherCode , Spring ищет redeemVoucherForm свойство в вашем классе RedeemVoucherForm . Он ожидает, что значением этого будет некоторый объект со voucherCode свойством, из которого он может считывать значение формы. Конечно, redeemVoucherForm свойство не существует, поэтому вы получаете ошибку.

Комментарии:

1. redeemCode ? Это должно быть где-то в вашем коде, но оно нигде не отображается в опубликованном вами коде.

2. Мой плохой, я снова набрал неправильно. Вместо VoucherCode я написал redeemCode . Все в порядке. Большое вам за это спасибо!