- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 ADF Faces 表和动态区域有疑问。
先决条件:
Oracle JDeveloper 11.1.1.6.0
我正在使用 ADF Faces 和 ADF 绑定(bind)层在 af:table 中显示 Java POJO 列表。ADF 表显示在有界任务流内的 View 上。
此任务流用于另一个 View 上的动态区域。
导航包含两个链接,用于通过 bean-property 选择要在动态区域中显示的有界任务流。
动态区域通过任务流绑定(bind)接收“输入参数映射”。
该映射包含要在表中显示的 POJO 和一个状态 Bean,该状态 Bean 应保存表状态和 View 上可能的其他组件的状态(请参见下面的实现)。
问题/需求:
<强>1。预选:
在第一次加载表时根据 POJO 中包含的数据预选表中的单个行。
<强>2。保持对任务流切换的选择:
在切换到另一个有界任务流 B 并返回 A(表所在位置)后,还应选择表中的选定行(有界任务流 A)。
<强>3。无 MDS
不使用保存点/MDS 功能。
<强>4。一致的表模型和绑定(bind)层
在任务流之间切换和选择表中的元素后,应该可以询问表组件和所选行的绑定(bind)。
切换任务流和选择表中的元素后,表行和绑定(bind)中选择的行应该保持一致。
已经尝试过:
预选一行并在不使用 MDS/保存点的情况下保持对任务流切换的选择。
我已将一些表属性绑定(bind)到“状态”bean。bean 的实现附在下面。
<强>1。表的属性:
选定的行键:
selectedRowKeys="#{pageFlowScope.stateBean.tableStateBean.rowKeySet}"
绑定(bind) RichTable 的 Backing-Bean 属性:
binding="#{pageFlowScope.stateBean.tableStateBean.richTable}"
默认选择Listener
selectionListener="#{bindings.postanschriften.collectionModel.makeCurrent}"
我们在这里尝试了什么:
在表的初始加载和更改行 bean 方法 getRowKeySet(..) 被调用。
在此方法中,要选择的行是在初始表加载时计算的 (this.rowKeySet == null)。因为表属性 selectedRowKeys 绑定(bind)到 pageFlowScope.stateBean.tableStateBean.rowKeySet
如果在表中选择另一行,bean 中的属性将更新。如果我们将任务流从 A 更改为 B,反之亦然,则调用支持 bean 属性 richTable 的 getter。在 getter 方法中,选择状态被恢复。
<强>2。 “状态”bean 的实现:
public class TableStateBean {
private RichTable richTable;
private RowKeySet rowKeySet;
private String bindingIteratorName;
private RowMatcher matcher;
public RowKeySet getRowKeySet() {
if (this.rowKeySet == null) {
preselectRow();
}
return rowKeySet;
}
public RichTable getRichTable() {
if (richTable != null && rowKeySet != null) {
RowKeySet currentTableSelection = getCurrentTableSelection();
RowKeySet tableSelectionToRestore = getTableSelectionToRestore();
executeSelection(tableSelectionToRestore, currentTableSelection);
}
return richTable;
}
public void setRichTable(RichTable pRichTable) {
richTable = pRichTable;
}
public void doTableSelection(){
preselectRow();
}
private RowKeySet getCurrentTableSelection() {
Row currentRow = (Row) JSFUtils.resolveExpression("#{bindings." + this.bindingIteratorName + ".currentRow}");
Key currKey = currentRow.getKey();
ArrayList<Key> lst = new ArrayList<Key>(1);
lst.add(currKey);
RowKeySet keySet = new RowKeySetImpl();
keySet.add(lst);
return keySet;
}
private RowKeySet getTableSelectionToRestore() {
RowKeySet tableSelectionToRestoreRow = null;
RowSetIterator rowSetIterator = extractRowSetIterator();
int tableRowIndexOfCurrentSelectedKey = getSingleRowKeyIndexValue(this.rowKeySet);
if (tableRowIndexOfCurrentSelectedKey != -1) {
Row currentRow = rowSetIterator.first();
for (int i = 0; rowSetIterator.hasNext() && i < tableRowIndexOfCurrentSelectedKey; i++) {
currentRow = rowSetIterator.next();
}
if (currentRow != null) {
Key newSelectionKey = currentRow.getKey();
ArrayList<Key> keyList = new ArrayList<Key>(1);
keyList.add(newSelectionKey);
tableSelectionToRestoreRow = new RowKeySetImpl();
tableSelectionToRestoreRow.add(keyList);
}
}
return tableSelectionToRestoreRow;
}
private int getSingleRowKeyIndexValue(RowKeySet rowKeySet) {
int tableRowIndexOfCurrentSelectedKey = -1;
if (rowKeySet != null) {
Object[] rowKeySetArray = rowKeySet.toArray();
List<Key> selectedRowKeys = (rowKeySetArray.length > 0) ? (List<Key>) rowKeySetArray[0] : new ArrayList<Key>();
if (selectedRowKeys.size() > 0) {
Key currentSelectedKey = selectedRowKeys.get(0);
Object[] attributeValues = currentSelectedKey.getAttributeValues();
assert (attributeValues.length > 0);
tableRowIndexOfCurrentSelectedKey = (Integer) attributeValues[0];
}
}
return tableRowIndexOfCurrentSelectedKey;
}
private void executeSelection(RowKeySet newCurrentRow, RowKeySet oldCurrentRow) {
SelectionEvent selectionEvent = new SelectionEvent(oldCurrentRow, newCurrentRow, richTable);
selectionEvent.queue();
AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
}
protected void preselectRow() {
RowSetIterator rowSetIterator = extractRowSetIterator();
RowKeySet oldSelection = getCurrentTableSelection();
Row currentRow = rowSetIterator.first();
while (rowSetIterator.hasNext()
&& (!matcher.match(currentRow))) // Matcher selects which row should be displayed according to the Object bound behind the binding-layer.
{
currentRow = rowSetIterator.next();
}
if (currentRow != null) {
Key key = currentRow.getKey();
RowKeySet newSelection = createRowKeySet(key);
setActiveRowKey(key);
executeSelection(newSelection, oldSelection);
setRowKeySet(newSelection);
}
}
private void setActiveRowKey(Key pKey) {
ArrayList<Key> lst = new ArrayList<Key>(1);
lst.add(pKey);
this.richTable.setActiveRowKey(lst);
}
private RowKeySet createRowKeySet(Key pKey) {
ArrayList<Key> lst = new ArrayList<Key>(1);
lst.add(pKey);
RowKeySetImpl rowKeySetToCreate = new RowKeySetImpl();
rowKeySetToCreate.add(lst);
return rowKeySetToCreate;
}
private RowSetIterator extractRowSetIterator() {
DCIteratorBinding iteratorBinding = ADFUtils.findIterator(this.bindingIteratorName);
RowSetIterator rowSetIterator = iteratorBinding.getRowSetIterator();
return rowSetIterator;
}
}
在某些情况下,绑定(bind)层似乎与 RichTable 组件上选择的元素不同步。所以我猜上面提到的解决方案不是很稳健。
是否有另一种方法可以以稳健的方式归档上述功能?我认为根据绑定(bind)的 POJO 中的某些值预选表中的一行并不奇怪。并且在有界任务流(动态区域)之间切换后保持表格的选定行应该是可能的,不是吗?
期待您的帮助
问候,
最大
最佳答案
设置“选定”行相当容易。有几种解决方案。这只是其中之一:为您的表绑定(bind)到您的支持 bean。在 getter 中添加以下代码:
DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
DCIteratorBinding dcItteratorBindings =
bindings.findIteratorBinding("yourViewObjectIterator");
RowSetIterator it = dcItteratorBindings.getRowSetIterator();
Rows[] rows = voTableData.getAllRowsInRange();
Row needsSelection = null;
for(Row r: rows)
{
//just search for the row you want to set selected
if(r.getAttribute("SomeAttribute").eqauls(..))
needsSelection = r;
}
if(needsSelection != null)
it.setCurrentRow(needsSelection);
关于jsf - ADF AF :table restoring table state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13469113/
我是 ADFS 的新手。实际上我不知道什么是主动或被动联邦,也不知道它们之间的区别,有人可以帮助我吗? 提前致谢 !!!... 最佳答案 被动使用浏览器 - 进行重定向等。协议(protocol)是
我有一个引用 ADAL.net 库的 c# 控制台应用程序(Microsoft.IdentityModel.Clients.ActiveDirectory 版本 2.19.208020213) 控制台
ADF initContext 和 prepareModel 之间的区别,因为两者都通过执行业务服务来准备数据,并通过绑定(bind)容器(Map 对象)使其可用。 最佳答案 ADF initCont
我想从按钮 ActionListener 执行数据控制操作(CreateInsert 和 Delete)。我知道可以从 Data Controls 菜单中插入一个数据控制按钮,但是由于各种原因我需要这
我需要将现有管道的副本(管道数量:10-20)从一个订阅克隆到另一个订阅(另一个 ADF)。有没有办法使用 Azure DevOps 来完成此事件? 最佳答案 选项1: 使用Git Configura
在我的解决方案中,我有两个 Azure 数据工厂项目:PR1 和 PR2。 PR1 包含某些资源的定义 - “resource1”。在 PR2 中,我有管道定义,我想在其中引用此资源: "linked
我正在使用 inputFile 组件上传文件。当我完成上传文件时,输入文本字段将缩小 其大小并更改大小以调整文件名。有没有办法为输入文本字段设置固定大小? 部分代码如下: 最佳答案 例如,使用 Pa
我是 ORACLE ADF FUSION MIDDLEWARE 的新手,所以我在表单设计方面没有经验。谁能帮我对齐布局中的一些元素。 我想始终将 ORACLE Logo 对齐到右侧。如果窗口分辨率降低
我的页面上有一个 af:outputText。 它的值需要很长时间才能生成,所以我不想在最初创建页面时生成。 相反,我希望页面在加载后对服务器进行异步回调,然后返回值将填充 outputText。 在
在 oracle adf 中,当我们将一个表从 Data Controls 拖放到 jsf 页面时,当我们运行项目时,预选了一行表。我应该怎么做才能在第一次加载页面时没有选择任何行? 我使用 jdev
我在 Windows Server 2016 上使用 OpenID Connect 设置 ADFS 时遇到困难。 我已经设置了用于测试的 AD 并且我可以成功进行身份验证,但是电子邮件声明不在 id
ADF 管道和 ADF 数据流有什么区别?为什么管道和数据流中支持的接收器/源不同?是否可以创建一个管道来从源读取数据、过滤、使用连接并将数据存储到没有数据流的接收器?请告诉我。 最佳答案 管道用于流
我有一个具有三个值的 selectonechoice:A、B、C,但我在其更改事件中遇到以下错误: Could not find selected item matching value "B"
我有 ADF 应用程序,它是一个电影数据库。我在设置 ADF 组件 af:inputText 时遇到了一个大问题。 我尝试了很多不同组件的不同宽度设置,但我总是失败。 有图片... 请问您不知道该怎么
我试图显示(在控制台中打印)对应于 ADF-BC 的 SQL 查询。我不知道如何使用 Jdeveloper 11.1.1.1.0 和 Oracle 11g 执行此操作。我只是想看看在将它们发送到 Or
我有两台名为 auth.somedomain.no 的 ADFS 2.0 代理服务器和两台名为 adfs.somedomain.no 的 ADFS 2.0 服务器。 然而,https://auth.s
我正在尝试将新的 MVC 应用程序发布到 Azure 应用服务。该应用程序使用ADFS单点登录身份验证,我在ADFS服务器上添加了依赖方信任,并且在本地主机上测试时可以登录。 发布到我的应用程序服务并
有人成功做到这一点吗? SelfSTS是一个 WCF 应用程序而不是 ASP.NET 应用程序,并且似乎没有很多用于进行 WCF 集成的示例或代码示例? 这非常有用,因为 SelfSTS 允许您动态创
我试图将我的 Identityserver4 配置为使用 ADFS 4.0 作为外部提供程序。 我已将其配置如下: app.UseCookieAuthentication(ne
我需要使用“-Djbo.debugoutput=console”启动我的 adf 应用程序。 我该怎么做?我使用的是jdevloper 11.1.1.6 最佳答案 您需要做的就是将上述字符串作为 Ja
我是一名优秀的程序员,十分优秀!