简体   繁体   中英

Bean property 'categoryName' is not readable or has an invalid getter method

Could anyone take a look of this error and help me? I spent 2 hours to find problem but I didn't find solution. Listing data works, but problem is when adding jsp with action="saveCategory.

org.springframework.beans.NotReadablePropertyException: Invalid property 'categoryName' of bean class [java.util.ArrayList]: Bean property 'categoryName' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

JSP:

<c:forEach var="tempInvoiceCategory" items="${invoiceCategory}">
    <tr>
        <td>${tempInvoiceCategory.categoryName}</td>
        <td>
            <button type="button" class="btn btn-info">Edit</button>
            <button type="button" class="btn btn-danger">Delete</button>
        </td>
    </tr>
</c:forEach>

<form:form class="forms-sample" action="saveCategory" modelAttribute="invoiceCategory" method="POST">
    <div class="form-group">
        <label>Nazwa Kategorii</label>
        <form:input path="categoryName" type="text" class="form-control"/>
    </div>
    <button type="submit" class="btn btn-primary mr-2">Submit</button>
</form:form>

Entity:

@Entity
@Table(name="T_INVOICE_CATEGORY")
public class InvoiceCategory {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="ID_CATEGORY")
    private int id;
    
    @Column(name="CATEGORY_NAME")
    private String categoryName;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCategoryName() {
        return categoryName;
    }

    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    @Override
    public String toString() {
        return "InvoiceCategory [id=" + id + ", categoryName=" + categoryName + "]";
    }
    
}

Controller:

@Controller
@RequestMapping("/invoice")
public class InvoiceController {
    
    @Autowired
    private InvoiceCategoryService invoiceCategoryService;
    
    @GetMapping("/listCategory")
    public String listCategory(Model theModel) {
        
        List<InvoiceCategory> invoiceCategory = invoiceCategoryService.getInvoiceCategory();
        
        theModel.addAttribute("invoiceCategory",invoiceCategory);
        
        return "add-invoice-category";
    }
        
    @PostMapping("/saveCategory")
    public String saveCustomer(@ModelAttribute("invoiceCategory") InvoiceCategory theInvoiceCategory) {
        invoiceCategoryService.saveInvoiceCategory(theInvoiceCategory);
        
        return "redirect:/customer/list";
    }
}

I think problem is that model attribute invoiceCategory is List<InvoiceCategory> and in same JSP you try build list of items and form which try access to this item, but it is List<InvoiceCategory> :

<form:form class="forms-sample" action="saveCategory" modelAttribute="invoiceCategory" method="POST">
    <div class="form-group">
        <label>Nazwa Kategorii</label>
        <form:input path="categoryName" type="text" class="form-control"/>
    </div>
    <button type="submit" class="btn btn-primary mr-2">Submit</button>
</form:form>

Try comment this part and run application again.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM