2011-07-29 2 views
0

양식에 DatePicker (org.apache.wicket.extensions.yui.calendar.DatePickerJavadoc)을 사용하고 있습니다. 양식은 두 개의 필드로 구성됩니다. 첫 번째 필드는 드롭 다운이고 두 번째 필드는 첫 번째 필드를 기반으로 동적으로 변경됩니다. "텍스트"를 선택하면 텍스트 상자가 나타납니다. "목록"을 선택하면 드롭 다운 메뉴가 나타납니다. '날짜'를 선택하면 날짜 선택 도구 및 관련 필드가 나타납니다.DateTextField가 숨겨져있을 때 어떻게 DatePicker 아이콘을 숨길 수 있습니까?

DateTextField dateField = new DateTextField("dateField", // ... 
DatePicker datePicker = new DatePicker(); 
dateField.add(datePicker); 

fieldOne.add(new OnChangeAjaxBehavior() { 
    protected void onUpdate(AjaxRequestTarget target) { 
     if (fieldOne.equalsIgnoreCase("list")) 
     { 
      dateField.setVisible(false); 
      // datePicker.setVisible(false); // This line is impossible 
      listField.setVisible(true); 
      textField.setVisible(false); 
     } 
     else if { /* similar visibility settings for dates and text */ } 
    } 
}); 

양식은 현재 날짜 선택에 을 변경 제대로 작동 :

여기에 내 현재 코드의 단순화 된 버전입니다. 날짜가 선택되고 사용자가 다른 것을 선택하면 문제가 발생합니다. 필드이 사라지지만 날짜 피커이 화면에 남아 있습니다. 불행히도 setVisible() 메서드 또는 이와 동등한 메서드가없는 것 같습니다. 사실 Wicket도 아닙니다. Component.

함께 표시하거나 사라지게하려면 어떻게해야합니까? 피커의 가시성을 직접 설정할 수없는 경우 필드의 가시성에 어떻게 든 연결시킬 수 있습니까?

답변

1

아직까지도 가장 쉽지만 여전히 유지 관리가 쉬운 솔루션은 WebMarkupContainer에 숨기려는 구성 요소를 그룹화하는 것입니다. 마크 업에서는 컨테이너에 <div> 요소를 사용하려고하지만 숨길 항목에 따라 다릅니다. (때로는 마크 업 자체가이 방법을 사용할 수 없지만 마크 업이 필요하지는 않음)

그런 다음 컨테이너의 가시성을 변경하기 만하면됩니다.

+0

나는이 작업을 수행하려고했습니다 (나는 그것을 함께 플레이를 계속하고 있습니다)하지만 실제로'WebMarkupContainer' 내부의 선택기를 얻을 수 없습니다. Picker는 내가 생성 한 소스가 아닌 생성 된 HTML에만 존재합니다. 그래서 컨테이너에서 모든 것을 감싸려고하면 필드 나 피커가 나타나지 않습니다. – Pops

+0

아, 마침내이 작업을했습니다. 내가 필요한'setVisible()'호출 중 하나를 놓쳤다. – Pops

+1

좋은지 나쁜지 잘 모르겠습니다 만, 자주하는 일로'isVisible()'을 오버라이드하는 것입니다. 따라서 구성 요소를 스캔하고 논리 표시/숨기기 방법을 쉽게 찾을 수 있습니다. – biziclop

0

또한 AjaxListeners의 좋은 아이디어는 처리 할 구성 요소의 .setOutputMarkupId(true)을 호출하는 것입니다. 그렇지 않으면 아마도 "찾을 수 없습니다".

로드 할 때 렌더링하지 않지만 나중에 구성 요소를 추가하려는 경우 setOutputMarkupPlaceholderTag(true)으로 문의해야합니다.

이 나에게 여러 번 도움을 ...

관련 문제