执行操作时,ADF表选择的行键错误

时间:2014-12-30 14:15:01

标签: oracle-adf jdeveloper

我在搜索任务流程中有3个TaskFlow,更新任务流和查看任务流。当用户在Search.jsff中选择View / Update时,将调用相应的任务流,并在成功时重定向回Search.jsff。

现在我有一个af:查询af:table在Search.jsff里面,其中每一行都有链接以查看更多详细信息和更新。当用户进行更新并重定向到搜索页面时,在查看详细信息或再次更新时,它始终显示第一行数据而不是突出显示的数据。
现在,如果用户单击同一行或其他行,然后单击“查看链接”或“更新”,则可以正常工作。

我的猜测是选择路虎失去了,如何维护桌子上的选定路线? 我可以在范围或全局变量中维护它吗?我的所有任务流都在viewPageScope中。


注意:已在图片中编辑了名称。所有任务流现在都在“始终使用现有事务”

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


创建TaskFlow。 Create_TaskFlow


更新TaskFlow。

Update_TaskFlow

1 个答案:

答案 0 :(得分: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具有pageFlow范围,那么您可以将其存储在bean属性中,而不是将所选密钥存储在范围变量中。