无效的属性" redeemVoucherForm' bean类[my.testapp.forms.RedeemVoucherForm]

时间:2016-10-02 12:09:58

标签: 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中,当我调用方法model.containsAttribute(" redeemVoucherForm")时,我正在添加模型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 个答案:

答案 0 :(得分:2)

我相信这一行

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

应该是

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

path的{​​{1}}元素应该与您设置为<form:input>的{​​{1}}的对象相关。在您的情况下,此对象是您的类commandName的实例。

如果您将路径设置为<form:form>,则Spring会在您的班级RedeemVoucherForm上查找redeemVoucherForm.voucherCode属性。它期望this的值是一个具有redeemVoucherForm属性的对象,从中可以读取表单值。当然,RedeemVoucherForm属性不存在,因此您会收到错误。