我在搜索任务流程中有3个TaskFlow,更新任务流和查看任务流。当用户在Search.jsff中选择View / Update时,将调用相应的任务流,并在成功时重定向回Search.jsff。
现在我有一个af:查询af:table在Search.jsff里面,其中每一行都有链接以查看更多详细信息和更新。当用户进行更新并重定向到搜索页面时,在查看详细信息或再次更新时,它始终显示第一行数据而不是突出显示的数据。
现在,如果用户单击同一行或其他行,然后单击“查看链接”或“更新”,则可以正常工作。
我的猜测是选择路虎失去了,如何维护桌子上的选定路线? 我可以在范围或全局变量中维护它吗?我的所有任务流都在viewPageScope中。
注意:已在图片中编辑了名称。所有任务流现在都在“始终使用现有事务”
中我的主要任务流程。搜索TaskFlow。
创建TaskFlow。
更新TaskFlow。
答案 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属性中,而不是将所选密钥存储在范围变量中。