2011-01-23 6 views
1

DropDownChoice를 사용 중입니다. 해당 키와 값은 User 개체의 username 속성입니다. 하지만 내가 제출할 때 다음 오류가 발생합니다. 클래스에 대해 정의 된 메소드가 없습니다. class java.lang.String 표현식 : username.wicket DropDownChoice 클래스에 대해 정의 된 get 메서드가 없습니다.

양식을 제출할 때 SearchPerson 개체의 name 속성에 양식 입력을 설정하고 사용자 (사용자 목록)를 사용하여 드롭 다운을로드하고 싶습니다. 내 선택 상자의 디스플레이와 값은 당신이 String 특성 (searchPerson.name) 내로 User을 주입하려는

<select name="select" wicket:id="name" id="select"> 
        <option value="test">test</option> 
       </select> 

form.add(new DropDownChoice("name",new PropertyModel(searchPerson, "name"),users,new ChoiceRenderer("username", "username"))); 

답변

3

모두 이름입니다. usersList<Strings>으로 만들거나 DropDownChoice에 IModel<User>을 지정하십시오.

[편집]

그리고, 구성 요소가 현재 모델 값의 키 속성을 얻으려고 노력하기 때문에 아마 발생되는 오류입니다. 따라서 searchPerson.name이 걸리며 속성 값을 얻으려고 시도합니다.이 값은 이 아니기 때문에 분명하지 않습니다. User이 아닙니다.

[업데이트]

당신이 원하는 것은 자동 완성 텍스트 필드의 경우

, 당신은 개찰구-확장에서 DefaultCssAutocompleteTextField을 시도 할 수 있습니다. 그리고 사용자 목록을 메모리에 반복하는 대신 사용자 대신 직접 사용자 이름을 데이터베이스 (최대 절전 모드)로 쿼리 할 수 ​​있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 위켓과 관련하여 그것은 의미가 없습니다. 내 상황에서는 검색 페이지가 있으며 검색, startDate, endDate, username 등의 각 필드를 나타내는 개체가 있고 사용자 이름 드롭 다운을 원한다면 모든 사용자와 목록 을 만들거나 IModel 을 드롭 다운에 할당 한 다음 그 값을 내 검색 개체로 추출하십시오. 선택 목록의 전체 아이디어는 선택 옵션 값, 선택 항목의 이름에 문자열을 밀어 넣는 것입니다. 응답에 대해 다시 한 번 감사드립니다. 직접적으로 계산하지 않았을 것입니다. – user373201

+1

DropDownChoice를 사용하면 theuser에서 하나의 객체를 선택할 수 있습니다. 명부. 나는 당신이 선택한 객체를 설정하기 위해 사용하는 속성이 같은 유형이라는 것을 이해한다고 생각합니다. 원하는 것이 텍스트 필드의 자동 완성이면 wicket-extensions에서 DefaultCssAutocompleteTextField를 시도해 볼 수 있습니다. 그리고 사용자 목록을 메모리에 반복하는 대신 사용자 대신 직접 사용자 이름을 데이터베이스 (최대 절전 모드)로 쿼리 할 수 ​​있습니다. – tetsuo

0

이러한 문제는 PropertyModel이 좋습니다. 주제는 객체이며 문자열 이름을가집니다. 토픽에서 toString() 메소드를 재정의하여 이름을 올바르게 지정하고 있습니다.이 방법을 사용하는 것이 좋습니다.

topicDropDown = new DropDownChoice<Topic>("topicOptions", new PropertyModel<Topic>  (this.top, "topicOptions"), new LoadableDetachableModel<List<Topic>>() { 
     @Override 
     protected List<Topic> load() { 
      return top.getAllTopics(); 

     } 
관련 문제