2015-02-19 3 views
2

Having ошибки: 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?NotReadablePropertyException Bean свойство не может быть прочитано или имеет недопустимый метод получения

Есть столы: команды, организации. Есть отношения «один ко многим».

модель Team

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

Как сделать весной получить все организации в JSP?

UPDATE:

Я прохожу список организаций и новый объект команды для 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; 
    } 

UPDATE2:

DoES commandName="team" ограничивает использование более 1 атрибуты модели, в этом случае их два: organizations и team? Как заставить его работать?

Custom attribute name: commandName Description: Name of the model attribute under which the form object is exposed. Defaults to 'command'. Required: false Can have runtime value: true

+1

Когда вы говорите _all organization_, что вы имеете в виду? –

+3

Кажется, вы пытаетесь извлечь свойство организации из класса Team; но в классе Team есть только одна организация. Свойство организации не существует (и об этом вам сообщает сообщение об исключении). –

+0

Зачем вам нужна 'form' для' Team'? –

ответ

0

<form:option> используется для добавления одного параметра в списке выбора. Вы можете добавить все элементы в коллекции с помощью <form:options> "

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

значение, которое будет выбрано, закончатся в Компонент команды прошел через форму, атрибут path используется для определения того, какое свойство будет установлено в Команде, в этом случае это organisation (не организации)

+0

Спасибо, теперь это работает! Но есть еще одна вещь - мне нужно отображать название каждой организации в раскрывающемся списке. На данный момент он показывает объекты. Я попробовал 'itemLabel', как описано здесь, но он не работает: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring-form.tld.html#spring-form. tld.options –

+1

как в ''? он должен работать –

Смежные вопросы

 Смежные вопросы