2014-03-29 32 views
1

我有一個要求,我有一個af:查詢面板,查詢後填充af:表。如何在默認情況下在Oracle中的af:表中選擇一行ADF

現在基於選擇任意1行時,它下面的圖表應該根據一些列進行填充錶行。現在

我的問題是,當表被填充在第一次搜索,沒有行被選中。

我需要自動選擇第一行。我已經從網絡論壇搜索了多個解決方案,但直到現在還沒有找到任何工作解決方案。

請幫助我,我應該用什麼樣的代碼以編程方式選擇一行。還有我應該把這段代碼放在後臺bean中。

回答

2

正如您已經正確提到的那樣,在表格的第一次渲染時,不會選擇任何行。我也遇到過這個問題,我通過調用BeforePhase(即:在頁面上的第一次渲染或刷新)時調用相應的VO的第一行來處理它。

我明白你打算這樣做的第一次搜索。 af:查詢組件具有名爲QueryListener的屬性。您可以將它與支持bean中的方法關聯起來。內容應該是這樣的:

private QueryEvent qEvent = null; 

    public void queryListener(QueryEvent queryEvent) { 
    setQEvent(queryEvent); 
    JSFUtils.invokeMethodExpression("#{bindings.YourViewObjectNameViewCriteriaQuery.processQuery}", Object.class, 
            QueryEvent.class, getQEvent()); 

    BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry(); //Edited 
    DCBindingContainer bc = (DCBindingContainer)bindings; 
    DCIteratorBinding iterator = bc.findIteratorBinding("YourViewObject1Iterator"); 
    Row r = iterator.getCurrentRow(); //Here you've got the very first row, and can operate with it 
    ..... 
    } 

    public void setQEvent(QueryEvent qEvent) { 
    this.qEvent = qEvent; 
    } 

    public QueryEvent getQEvent() { 
    return qEvent; 
} 

這樣,當查詢被執行時(即:當搜索結束時),你應該能夠得到第一行。 獲得第一行後,您可以編程的方式執行圖形流程或執行任何操作。

注:invokeMethodExpression可以在裏面JSFUtils,這是一個starndard類與源代碼,你可以在這裏下載一些靜態方法來發現:JSFUtils.java

+0

嗨@Endrik,我想嘗試的解決方案,並有2斷枝: 1. JSFUtils.java不必須的InvokeMethodExpression 2. UsersBean.getBindings();你能不能分享一樣的代碼,因爲我沒有任何這樣的方法。 請幫 –

+0

一個更thing..i測試了空白查詢聽衆只有一個SYS了聲明,發現即使在查詢時,並不是在所有的執行它...請說明爲什麼這種情況正在發生.. –

+0

哦,我很抱歉,我沒有看到UsersBean的用法(這是我自己的實用程序bean與靜態方法之一)。我編輯了代碼。我還添加了另一個鏈接,其中會找到invokeMethodExpression方法。根據它沒有執行的事實,我會說要檢查你是否已經完成了鏈接,它應該被調用。下面是如何重寫其行爲的一個例子:http://andrejusb.blogspot.com/2008/11/adf-query-component-and-view-criteria.html – Endrik

相關問題