2014-01-09 5 views
1

저는 ZK 프레임 워크에 익숙하지 않고 몇 가지 사항을 커스터마이징하려고 시도하고 있습니다. 한 지점에서이를 달성하는 방법을 모르겠습니다. 버튼에서 선택된 ListBox 값 가져 오기 | ZK

는 내가 2 드롭 다운 단추를 표시해야합니다 버튼 클릭 이벤트에 값 아래로 그 하락을 지속 할 필요가 미리 정의 된 섹션이 있습니다. 이 그것은

여기 mybean
<bean id="mybean" parent="parentBean" class="WidgetRenderer"> 
    <property name="detailRenderer"> 
      <bean class="DetailsListRenderer" parent="abstractWidgetDetailRenderer"/> 
    </property> 
</bean> 

메인 섹션을 표시하는 데 사용되는 내가 버튼을 detailRenderer에 추가하는 동안이 콩을 사용하여 아래로 내 드롭을 추가하고 파일을 봄으로 정의하고있다 방법이다.

저장 버튼 onClick 이벤트에 결합되어,하지만 난 내 사용자 지정의 값은 드롭 다운 가져올 수 있는지 확실하지 않다? 나는 그 Dropdown 이벤트 onClick와 바인딩에 대해 알고 있지만 같은 클래스에 있어야합니다.

어느 한이가 다른 클래스 내 버튼 코드 나는 다음 코드

Listbox listbox = new Listbox(); 
listbox.appendItem("item1", "item1"); 
listbox.appendItem("item2", "item2"); 

아래로 아래로 작성하고 그 드롭 불통의 값을 가져올 수있는 방법을 나에게 제안 할 수

protected void createUpdateStatusButton(Widget widget,Div container) 
{ 
    Button button = new Button(LabelUtils.getLabel(widget, buttonLabelName, new Object[0])); 
    button.setParent(container); 
    button.addEventListener("onClick", new EventListener() 
    { 
     public void onEvent(Event event)throws Exception 
     { 
      MyClass.this.handleSaveStatusEvent(widget, event); 
      } 
    }); 
    } 

답변

2

당신에게 onSelect을 청취 할 수 있습니다 때 Listbox 선택의 변화에보다 구체적인이다 (차라리 문자열을 작성하는 것보다 Events.ON_SELECT를 사용하는 것을 선호).

어느 쪽이든은, 키는 오히려 Listbox 자체에 다시가는 것보다, 당신의 EventListener에 전달 된 Event에서 원하는 정보를 얻을 수 있습니다. 기본 Event은 일반적으로 더 많은 관련 정보에 액세스 할 수 있습니다 (이 경우 SelectEvent) getTargetgetData하지만 더 특정 이벤트 사용에 대한 유용한 정보를 전달합니다.

button.addEventListener(Events.ON_SELECT, new EventListener<SelectEvent<Listitem, MyDataObject>() { 
    public void onEvent(SelectEvent<Listitem, MyDataObject> event) { 
     // Now you can access the details of the selection event.. 
     List<Listitem> selectedItems = event.getSelectedItems(); 
     List<MyDataObject> selectedObjects = event.getSelectedObjects(); 
    } 
}); 

다른 ZK 위젯에 사용할 수있는 이벤트는 Component Reference documentation에서 확인할 수 있습니다.

+0

덕분에 내가 ZK 아주 새로운 오전,'Events.ON_SELECT'이 될 것입니다 'ListBox'에서 무엇을 선택했을 때 트리거되지만 버튼을 클릭 할 때 필요합니다. 문맥 질문 중 일부를 묻는다면 죄송합니다. 간단히 말해서'Save '버튼을 클릭 할 때 ListBox 둘 다 값을 가져 오려고합니다 –

+0

코드로 생성하는 대신 zul 페이지를 만드는 것이 어떻습니까? – chillworld

+0

@chillworld : 나는 그 일을 할 수있는 충분한 자유가 없으며, zul 파일이없는 기존 코드 패턴을 따라야 만합니다. Java 코드 –

1

사용자가 버튼을 클릭하면 페이지에서 정보를 수집하려고합니다 (예 : Listbox 선택 상태). 질문을 이해하면 (이전 답변에서 생각한 것 같지 않습니다) 문제는 당신이 페이지를 작성하기 위해 이질적인 클래스를 사용하고 있기 때문에 버튼을 클릭했을 때 다양한 ZK Component에 접근 할 수 없다는 것입니다.

(1 분 동안 여러 클래스 문제 무시)
높은 수준에서 보면 ZK 커뮤니티에 두 종류의 캠프가 있습니다. 최신 MVVM 접근 방식은 사용자가 프런트 엔드와 상호 작용할 때 뷰가 관련 상태를 백 엔드로 밀어 넣어야 함을 나타냅니다. 이렇게하면 백엔드는 클라이언트 상태를 묻지 않아도되며 단추를 클릭하면 값/상태가 서버에서 사용 준비가됩니다.

다른 캠프는 백엔드가 항상 클라이언트 Component에 액세스 할 수 있도록 클라이언트를 서버에 바인딩하며 버튼을 클릭하면 구성 요소와 상호 작용하여 값/상태를 쉽게 검색 할 수 있습니다.

또 다른 방법은 가능한 한 많은 이벤트 데이터에 의존하지만, 전혀 클라이언트에 백 엔드를 결합하지, 더 내 이전의 대답에 대해 이야기 한 것 같다.나는 그것이 충분한 곳에서이 접근법을 선호한다.

이제 선호하는 방법을 자유롭게 선택할 수 있으며 ZK에는 이러한 캠프에서 작업하는 방법에 대한 많은 설명서가 있습니다. 그러면 클라이언트 상태가 서버에 저장됩니다 (MVVM의 클라이언트에 의해 푸시되거나 MVC에 바인딩 됨). 여기서 해결할 수있는 문제는 아니라고 생각합니다. 소프트웨어 엔지니어링의 도전입니다. 개인적으로 표준 ZK 패턴을 사용하도록 권장하지만 프레임 워크를 사용하지 말아야합니다. 당신이 정말로 당신의 경로를 이동하려는 경우, 당신은과 같이 즉석에서 Listbox에 대한 참조를 잡을 수 다음 input..since에 대한

public class Foo { 

    public static final String LISTBOX_ID = "myListbox"; 

    public void renderListbox(Component parent, MyItem items) { 
     Listbox listbox = new Listbox(); 
     listbox.setId(LISTBOX_ID); 
     listbox.setParent(parent); 
     for (MyItem item : items) { 
      listbox.appendItem(item.getName(), item); 
     } 
    } 

} 

public class Bar { 

    @Listen(Events.ON_CLICK + " = #saveButton") 
    public void saveButtonClicked(Event event) { 
     Component saveButton = event.getTarget(); 
     Listbox listbox = (Listbox) saveButton.getFellow(Foo.LISTBOX_ID); 
     Set<Listitem> selection = listbox.getSelectedItems(); 
     // do something 
} 
+0

ID를 구성 요소에 제공하지 않고 이러한 값을 얻을 수있는 방법이 있습니까? 문제는 페이지를 새로 고치는 동일한 페이지의 다른 버튼을 사용하는 것과 고유 한 ID 예외가 발생했습니다. 해당 버튼을 제거 할 수 없으며 거기에 있어야합니다. –

+0

'Components'가 ZUL에 정의되어 있으면 컨트롤러 (CSS 셀렉터 사용) (http://books.zkoss.org/wiki/Small_Talks/2011/January/Envisage_ZK_6:_An_Annotation_Based_Composer_For_MVC#Comparison_with_CSS3_Selector)를 사용하거나 서버에 데이터를 바인딩 할 필요가 없으므로 구성 요소를 전혀 참조하지 않습니다. Java로 컴포넌트를 작성하는 경우,'Object' 참조를 보유하는 것 이외에 Java에서 컴포넌트를 검색하는 방법을 생각할 수 없습니다. –

관련 문제