2015-08-07 16 views
8

Udało mi się uzyskać kliknięcie przycisku działającego do tej pory, postępując zgodnie z dokumentacją. Obecnie zmagam się z programowym wyzwalaniem zdarzenia click komponentu ADF.Zdarzenie wyzwalania/symulacji kliknięcia programowo za pośrednictwem ClientListerner

Kod źródłowy jest w następujący sposób:

<af:showDetailItem id="pane1" text="Panel Label 1" disclosed="true"> 
    <af:commandButton text="commandButton 1" id="cb1"> 
     <af:clientListener method="showNext" type="action" /> 
    </af:commandButton> 
</af:showDetailItem> 

<af:showDetailItem id="pane2" text="Panel Label 2"> 
    <af:commandButton text="commandButton 2" id="cb2"> 
     <af:clientListener method="showNext" type="action" /> 
    </af:commandButton> 
</af:showDetailItem> 

<af:showDetailItem id="pane3" text="Panel Label 3"> 
    <af:commandButton text="commandButton 3" id="cb3"> 
     <af:clientListener method="showNext" type="action" /> 
    </af:commandButton> 
</af:showDetailItem> 

Javascript

function showNext(evt){   
    var src = evt.getSource(); 
    var showDetailItemNode = src.getParent(); // targets the showDetailItem tag  
    /* how do I trigger the click event of this node */ 
} 

Więc w zasadzie to, co staram się osiągnąć to, że po naciśnięciu przycisku # CB1 kliknięciu, chcę symulować kliknięcie zdarzenie showDetailItem # pane1 i tak dalej ...

+0

Jak napisać JavaScript zależy na drzewie DOM HTML (prawdopodobnie już wiesz, JS działa w przeglądarce internetowej, a nie w serwer WWW). Bardzo niewiele osób korzysta z Oracle ADF, a jeszcze więcej osób mogłoby spróbować samodzielnie lub powiedzieć z góry, jak wygląda wygenerowany wynik HTML powyższego XHTML. Inne osoby nie są zainteresowane instalowaniem Oracle ADF tylko po to, aby zorientować się w faktycznym wygenerowanym wyjściu HTML. Innymi słowy, masz więcej szans na odpowiedź, jeśli umieścisz wygenerowany wynik HTML lub całkowicie zmienisz pytanie tak, aby zawierało kod HTML w prawdziwym smaku i retargetingu MCVE u użytkowników [html] '. – BalusC

+0

@ BalusC Wystarczająco fair. Ale zakładam, że używanie javascript na wygenerowanym kodzie HTML nie byłoby najlepszą praktyką do naśladowania (nawet gdyby to działało), ponieważ ADF ma swój własny zalecany sposób obsługi interakcji po stronie klienta. Używanie javascript na wygenerowanym HTML jest opcją i jest to coś, co mogę zrobić sam, ale nie będę postępować zgodnie z podejściem podanym w dokumentacji ADF; tj. za pomocą znacznika 'clientListener'. – asprin

+1

Nie jestem pewien, czy to jest odpowiedź, ponieważ nie wiem nic o ADF, nie mówiąc już o wygenerowanym przez niego wyjściu HTML, ale może to być pomocne wskazanie we właściwym kierunku: jeśli dany element HTML DOM ma atrybut 'onclick', to możesz wyzwolić go za pomocą 'element.onclick()'. Lub, jeśli chcesz zasymulować kliknięcie myszą na elemencie HTML DOM, po prostu wykonaj 'element.click()', który uruchomi jego 'onclick', jeśli taki istnieje, a następnie zapisz w drzewie DOM, w zależności od jego powrotu wartość. – BalusC

Odpowiedz

2

Możesz przechodzić przez dzieci komponentu akordeonu, aby dowiedzieć się, który program showDetailItem jest obecnie ujawniany. Następnie ustaw tę opcję na opcję = false i ustaw wartość true na następną.

+0

Ale w jaki sposób je przechodzisz? – Kukeltje

+0

I sekunda @Kukeltje Czy możesz nam pokazać, jak? – asprin

+0

W zarządzanym komponencie bean można uzyskać odwołanie do komponentu akordeonu i użyć metody getChildren() dla tego składnika, aby dowiedzieć się, które składniki są w nim zawarte. –

3
<af:serverListner> 

jest tag, który można użyć w tandemie z <af:clientListner> propagować swoje wydarzenie do zarządzanej fasoli Więcej skończy, można również kojarzy wyżej tagi z <af:showDetailItem> również. Mam nadzieję, że to pomoże .

+0

Przykro mi. Nic nie pomaga.Co więcej, nie chcę mieć serwera ServerListener, gdy można to osiągnąć całkowicie po stronie klienta: – asprin

+0

@asprin: Podaj pytanie w społeczności Oracle (https://community.oracle.com/community/java/java_development_tools/application_development_in_java/jdeveloper_and_adf) również dla lepszej widoczności, jeśli tego nie zrobi. – Sid

+0

Witam Sid. Już zrobiłem tam stanowisko. To było pierwsze miejsce, o które pytałem https://community.oracle.com/thread/3779096 – asprin

3

Jeśli chcesz całkowicie manipulować akordeonem przy użyciu JavaScriptu na kliencie, musisz skorzystać z JavaScript API dla ADF Faces. szczególności te dwa: http://docs.oracle.com/cd/E23943_01/apirefs.1111/e12046/oracle/adf/view/js/component/rich/layout/AdfRichShowDetailItem.html i

http://docs.oracle.com/cd/E23943_01/apirefs.1111/e12046/oracle/adf/view/js/component/rich/layout/AdfRichPanelAccordion.html

+0

W tym przypadku przydatny może być przykładowy kod – asprin