#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 . Все в порядке. Большое вам за это спасибо!