2012-09-25 5 views
1

AjaxCallDecorator를 사용하고 있음을 알리는 드롭 다운 목록이 있습니다. 현재 드롭 다운 목록에서 주소를 선택하면 일부 아약스를 사용하여 주소를 확인합니다. 드롭 다운 옆에 회 전자 아이콘을 사용하여 사용자에게 어떤 일이 일어나고 있음을 알립니다. 드롭 다운의 옵션 중 하나는 "주소 수동 입력"입니다. 그들이 이것을 선택할 때 AjaxCallDecorator를 장식하지 않기를 바랍니다. 매우 오래 (어쩌면 1/4 초) 팝업되지 않지만 전혀 나타나지 않기를 바란다.드롭 다운 값을 기준으로 조건부로 표시 할 AjaxCallDecorator 필요

사용자가 드롭 다운에서 선택한 항목에 따라 조건 적으로 Decorator를 표시하는 방법을 알 수 없습니다. getAjaxCallDecorator는 데코레이터를 사용할 것인지 결정하는 데에만 사용되며 초기화 또는 페이지로드시 한 번만 호출됩니다. 새로운 드롭 다운 선택을 선택할 때마다 호출되지 않습니다.

감사합니다.

답변

2

마음에 온 첫 번째 솔루션은 직접 자바 스크립트 코드에서 사용자에 의해 choosed 할 무슨 옵션을 확인하는 것입니다 (미안 해요, 난 개찰구 1.4.20을 사용하고 있음을 포함해야).

@Override 
protected IAjaxCallDecorator getAjaxCallDecorator() { 
    return new AjaxCallDecorator() { 

     @Override 
     public CharSequence decorateScript(Component c, CharSequence script) { 
      return "if (" + shouldUseDecoratorScript() + ") { /* Show the spinner icon */ } " + script; 
     } 

     @Override 
     public CharSequence decorateOnSuccessScript(Component c, CharSequence script) { 
      return "if (" + shouldUseDecoratorScript() + ") { /* Hide the spinner icon */ } " + script; 
     } 

     @Override 
     public CharSequence decorateOnFailureScript(Component c, CharSequence script) { 
      return "if (" + shouldUseDecoratorScript() + ") { /* Hide the spinner icon */ } " + script; 
     } 

     private CharSequence shouldUseDecoratorScript() { 
      return "this.value !== \"" + enterAddressManuallyItem.getId() + "\""; 
     } 
    }; 
} 

여기 enterAddressManuallyItem 옵션을 "수동으로 주소를 입력"에 해당하는 항목입니다 :

여기 (이 AjaxCallDecorator와 마지막 버전 이후) 개찰구 1.5 코드입니다. 나는 getId() 게터이 있다고 가정하고, 당신은 당신의 DropDownChoice 생성자의 마지막 매개 변수로

new ChoiceRenderer<DropDownChoiceItem>("text", "id") 

같은 것을 사용합니다.

아마도 더 좋은 해결책이 있습니다.

관련 문제