【问题标题】:Bean property 'categoryName' is not readable or has an invalid getter methodBean 属性“categoryName”不可读或具有无效的 getter 方法
【发布时间】:2021-06-16 22:10:15
【问题描述】:

谁能看看这个错误并帮助我?我花了 2 个小时才找到问题,但没有找到解决方案。 列出数据有效,但问题是添加带有 action="saveCategory 的 jsp。

org.springframework.beans.NotReadablePropertyException:bean 类 [java.util.ArrayList] 的无效属性“categoryName”:Bean 属性“categoryName”不可读或具有无效的 getter 方法:getter 的返回类型是否匹配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
@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
@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";
    }
}

【问题讨论】:

    标签: java spring jsp model-view-controller


    【解决方案1】:

    我认为问题在于模型属性 invoiceCategory 是 List&lt;InvoiceCategory&gt; 并且在同一个 JSP 中,您尝试构建项目列表和尝试访问该项目的表单,但它是 List&lt;InvoiceCategory&gt;:

    <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>
    

    尝试评论这部分并再次运行应用程序。

    【讨论】:

    • 是的,当我评论这部分它有效时,这是正确的。但是当我在 jsp modelAttribute="invoiceCategory" 中更改为 modelAttribute="invoiceAddCategory" 并且在控制器中相同时,我有“Bean 名称 'invoiceAddCategory' 的 BindingResult 和普通目标对象都不能作为请求属性”:(
    • @AdrianDrohomirecki invoiceAddCategory - 我没有看到设置此模型属性的任何代码部分,请在访问之前检查您是否确实设置了此属性。
    • 你是对的,非常感谢您的帮助,很抱歉打扰! :) 总结: - 我不能为不同的类型拥有相同的模型属性。 - 我没有在控制器中设置模型。
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多