【问题标题】:NotReadablePropertyException Bean property is not readable or has an invalid getter methodNotReadablePropertyException Bean 属性不可读或具有无效的 getter 方法
【发布时间】:2015-02-19 23:04:59
【问题描述】:

有错误:org.springframework.beans.NotReadablePropertyException: Invalid property 'organizations' of bean class [com.sprhib.model.Team]: Bean property 'organizations' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

有表格:团队、组织。存在一对多关系。

团队模型

@Entity
@Table(name="teams")
public class Team {

    private Organization organization;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "FK_Organization_id", nullable = false)
    public Organization getOrganization() {
        return organization;
    }

    public void setOrganization(Organization organization) {
        this.organization = organization;
    }
}

组织

@Entity
@Table(name = "organization")
public class Organization {
    private Set<Team> teams;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "organization")
    public Set<Team> getTeams() {
        return teams;
    }

    public void setTeams(Set<Team> teams) {
        this.teams = teams;
    }
}

JSP

<form:form method="POST" commandName="team" action="${pageContext.request.contextPath}/team/add.html">    
     <form:select path="organizations">
         <form:option value="${organization}">
             <c:out value="${organization.name}"/>
         </form:option>
     </form:select>
</form:form>

如何让spring让所有组织都使用JSP?

更新:

我使用控制器将 所有组织 和新 Team 对象的列表传递给 jsp:

@Controller
@RequestMapping(value="/team")
public class TeamController {

    @Autowired
    private TeamService teamService;

    @Autowired
    private OrganizationService organizationService;

    @RequestMapping(value="/add", method=RequestMethod.GET)
    public ModelAndView addTeamPage() {
        ModelAndView modelAndView = new ModelAndView("teams/add-team-form");
        modelAndView.addObject("team", new Team());
        modelAndView.addObject("organizations", organizationService.getOrganizations());

        return modelAndView;
    }

更新2:

commandName="team" 是否限制使用超过 1 个模型属性,在这种情况下有两个:organizationsteam?如何让它发挥作用?

自定义属性名称:commandName 描述:模型名称 暴露表单对象的属性。默认为 '命令'。必需:false 可以有运行时值:true

【问题讨论】:

  • 当你说所有组织时,你是什么意思?
  • 您似乎正在尝试从 Team 类中获取组织属性;但是 Team 类只有(一个)组织。 organizations 属性不存在(这就是异常消息告诉您的内容)。
  • 为什么Team bean 需要 form
  • 我使用表单添加新的Team 对象并存储它。我必须为commandName 属性指定一些东西...

标签: java spring jsp spring-form


【解决方案1】:

&lt;form:option&gt; 用于将单个选项附加到选择列表。您可以使用&lt;form:options&gt;"

添加集合中的所有元素
<form:select path="organization">
    <form:options items="${organizations}" />
</form:select>

您也可以同时使用两者,例如添加一个默认未选中的选项:

<form:select path="organization">
    <form:option value="" label="- Select -"/>
    <form:options items="${organizations}" />
</form:select>

将被选择的值将以通过表单传递的 Team bean 结尾; path 属性用于确定将在 Team 中设置的属性,在本例中为 organisation(不是组织)

【讨论】:

  • 谢谢,现在可以了!但还有一件事 - 我需要在下拉列表中显示每个组织的名称。目前它显示对象。我尝试了itemLabel,如此处所述,但它不起作用:docs.spring.io/spring/docs/current/spring-framework-reference/…
  • 喜欢&lt;form:options items="${organizations}" itemLabel='name' /&gt; 吗?它应该工作
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2019-12-13
相关资源
最近更新 更多