2014-12-30 22 views
0

我有3個TaskFlow,更新任務流和查看任務流在搜索任務流中。當用戶在Search.jsff中選擇查看/更新時,將調用相應的任務流,並在成功時重定向到Search.jsff。ADF表選中的行鍵執行操作時出錯

現在我有一個af:查詢與af:table裏面的Search.jsff其中每行有鏈接查看更多詳細信息和更新。當用戶進行更新並重定向到搜索頁面時,在查看詳細信息或再次更新時,它始終顯示第一行數據而不是突出顯示的數據。
現在,如果用戶單擊同一行或其他,然後單擊查看鏈接或更新它工作正常。

我的猜測是selectedRowKeys丟失了,如何維護表中的selectedRowKeys?
我可以在範圍或全局變量中維護它嗎?我所有的任務流都在viewPageScope中。


注意:已經在圖片中編輯了名稱。所有任務流現在位於「始終使用現有交易」

我的主要任務流程。搜索TaskFlow。 Search_TaskFlow


創建任務流。 Create_TaskFlow


更新任務流。

Update_TaskFlow

+0

您是在任務流之間共享數據控制還是將選定行鍵作爲輸入傳遞給任務流? – amishra

+0

雅我在任務流中共享DC。 –

+0

另外,您是否有結果表的自定義selectionListener,或者使用默認值? – amishra

回答

0

這裏是當選擇一排保存選定行鍵,然後在以後恢復它回到一個辦法: -

爲表

SelectionListener中=創建一個選擇監聽器「#{backingBeanScope.mBean.onTableSelect}」

並使用它將選定的行鍵存儲在pageFlowScope可變

public void onTableSelect(SelectionEvent selectionEvent) { 
    JSFUtils.resolveMethodExpression("#{bindings.DepartmentsView.collectionModel.makeCurrent}", null, new Class[]{ SelectionEvent.class }, new Object[]{ selectionEvent }); 
    RichTable table = (RichTable) selectionEvent.getSource(); 
    CollectionModel tableModel = (CollectionModel) table.getValue(); 
    JUCtrlHierBinding adfTableBinding = (JUCtrlHierBinding) tableModel.getWrappedData(); 
    DCIteratorBinding tableIteratorBinding = adfTableBinding.getDCIteratorBinding(); 
    String key = tableIteratorBinding.getCurrentRowKeyString(); 
    AdfFacesContext.getCurrentInstance().getPageFlowScope().put("selectedRowKey", key); 
} 

在表結合的getter方法,設置當前行與變量存儲在pageFlowScope鍵值

public RichTable getSearchTable() 
{ 
    DCBindingContainer dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry() ; 
    DCIteratorBinding iter= dcBindings.findIteratorBinding("DepartmentsView1Iterator"); 
    if (null != AdfFacesContext.getCurrentInstance().getPageFlowScope().get("selectedRowKey")) 
    { 
     String key = (String)AdfFacesContext.getCurrentInstance().getPageFlowScope().get("selectedRowKey"); 
     iter.setCurrentRowWithKey(key.trim());  
     AdfFacesContext.getCurrentInstance().getPageFlowScope().put("selectedRowKey", null); 
    } 
    return searchTable; 
} 

如果您的託管bean具有頁面流範圍,那麼你代替存儲選擇鍵一個範圍變量,您可以將它存儲在一個bean屬性中。

+0

我只是在PageFlowScope中放置了一個字符串,並在執行我的操作後試圖訪問它,但它似乎返回null。 –

+0

「如果您的託管bean具有pageFlow作用域,那麼您不是將選定鍵存儲在作用域變量中,而是可以將其存儲在bean屬性中。」 - 最初我嘗試這樣做,但在訪問bean attr時它也返回NULL。 –

+0

pageFlowScope必須是主任務流,並且任何變量或bean屬性集都不能在被調用的任務流內進行訪問。你在哪裏設置了變量/屬性以及你試圖訪問它的地方? – amishra