2013-04-16 3 views
0

테이블보기에서 레코드 수를 표시하는 목록보기를 만들었으며 목록보기 안에는 텍스트 필드와 드롭 다운 선택 필드가 있습니다.Wicket ListView - 텍스트 필드를 통해 dropdownchoice 새로 고침

내가 달성해야하는 것은 텍스트 필드를 onchange하여 특정 레코드에 대한 드롭 다운 선택 값을 기본값으로 설정하는 것입니다. 그러나 다음 코드를 사용할 때 업데이트 될 단 하나의 레코드가 작동 할 때 작동하지만 여러 레코드가있는 경우 실패합니다. 도움이 필요하다! 미리 감사드립니다.

샘플 코드 :

new ListView("list", getItemList()) { 
    protected void populateItem(ListItem item) { 
     final Sl qv = (Sl) item.getModelObject(); 
     item.setModel(new CompoundPropertyModel(qv)); 

     ratio = new TextField("ratio"); 
     item.add(ratio); 
     ratio.setOutputMarkupId(true); 

     ratio.add(new AjaxFormComponentUpdatingBehavior("onkeyup") { 
      @Override 
      protected void onUpdate(AjaxRequestTarget target) { 
       getProperties().put("rating" + Sl.getid(), "Strong"); 
       target.addComponent(rating); 
      } 
     }); 

     rating = new DropDownChoice("rating", getDdlmodels().get(item.getIndex()), ratingList); 
     item.add(rating); 
     rating.setOutputMarkupId(true); 
    } 
} 

참고 : 키와 valueMap과 속성 (DdlModels)와 PropertyModel 얻을하는 데 사용하고 dropdownchoice의 값을 설정하고있다. 텍스트 필드의 onchange시 propertyModel이 업데이트되었지만 Ajax 새로 고침을 추가 했더라도 dropdownchoice가 새로 고침/다시 렌더링되지 않았습니다.

+0

목록보기 항목에 구성 요소를 추가해야합니다. 따라서 item.add()를 add (..)하는 대신에. (varaible = new ..)를 제거하십시오. 읽기가 힘듭니다. – bert

+0

답장을 보내 주셔서 감사합니다. 사실 item.add()는 이미 간단한 버전의 코드를 작성하는 동안 그 내용을 놓쳤습니다. 지적 해 주셔서 고마워요. 실제로 위의 코드는 단지 하나의 레코드를 얻었지만 여러 레코드가 실패했을 때 제대로 작동합니다. target.add (등급)와 관련이 있다고 생각합니다.이 방법으로 새로 고칠 수는 없지만 다른 방법은 찾을 수 없습니다. 방법. – sschong

답변

0

문제는 모든 텍스트 필드를 클래스의 비공개 멤버이므로 마지막 "등급"에 "바인딩"하는 것입니다.

"onUpdate"비헤이비어가 호출되면 항목 채우기 메서드의 범위 외부에서 선언 된 등급 멤버를 사용하므로 목록 뷰의 마지막 반복시 할당 된 등급 멤버를 사용합니다.

그렇기 때문에 하나의 레코드에서 작동합니다. 현재 구현은 마지막 "행"에 대해서만 작동해야합니다.

"rating"변수는 채우기 항목 방법 안에 으로 선언해야합니다.

+0

예! 답장을 보내 주셔서 감사합니다, 그것은 항목을 채우는 방법 안에 변수 선언을 변경 한 후에 작동합니다. 다시 한번 감사드립니다. – sschong