表中的ADF复选框,所选行缺少计时

时间:2018-12-12 17:39:39

标签: java oracle-adf

我有一张表,其中第一列应该是一个复选框,以便您可以选择一堆行,现在,只需将其添加到存储在pageflowscope中的列表中即可。问题是单击复选框有时会使所选行滞后,并添加错误的行。例如我单击第一行中的复选框,然后在处理过程中,取消选中它,然后单击另一个复选框,它仍将添加第一行,因为它认为所选行仍是第一行。

表格:

Prints out all the names and continue the while True loop.

*Adding Craig to newnames.txt*

print("Found Craig in the old_list!")

continue to search if new names got added.

我的Bean方法:

 <af:table value="#{bindings.documents.collectionModel}" var="row" rows="#{bindings.documents.rangeSize}"
                  emptyText="#{bindings.documents.viewable ? 'No data to display.' : 'Access Denied.'}"
                  rowBandingInterval="0" selectedRowKeys="#{bindings.documents.collectionModel.selectedRow}"
                  selectionListener="#{bindings.documents.collectionModel.makeCurrent}" rowSelection="single"
                  fetchSize="#{bindings.documents.rangeSize}" filterModel="#{bindings.documentsQuery.queryDescriptor}"
                  filterVisible="true" queryListener="#{bindings.documentsQuery.processQuery}" varStatus="vs" id="t1"
                  autoHeightRows="0" styleClass="AFStretchWidth" scrollPolicy="page">
            <af:column id="c41" align="center" width="50">
                <?audit suppress oracle.adf.faces.tablecolneedsheaders?>
                <af:selectBooleanCheckbox id="sbc1" valueChangeListener="#{CopyQueueBean.toggleCheckbox}"
                                          autoSubmit="true">
                    <?audit suppress oracle.adf.faces.compnotlabelled?>
                </af:selectBooleanCheckbox>
            </af:column>

            <af:column sortProperty="#{bindings.documents.hints.id.name}" filterable="true" sortable="true"
                       headerText="#{labels.ID}" id="c1" align="center">
                <af:outputText value="#{row.id}" shortDesc="#{bindings.documents.hints.id.tooltip}" id="ot1"/>
            </af:column>
            <af:column sortProperty="#{bindings.documents.hints.fileName.name}" filterable="true" sortable="true"
                       headerText="#{labels.TITLE}" id="c4" align="center" width="400">
                <af:panelGroupLayout id="pgl2" styleClass="AFStretchWidth" inlineStyle="float:left; text-align:left;">
                        <af:spacer width="20px" id="leftIconSpacer" />
                        <af:image source="#{row.icon}" id="i6"
                                  inlineStyle="width:40.0px;"/>
                        <af:spacer width="40px" id="iconSpacer" />
                        <af:outputText value="#{row.fileName}" id="fot2"/>
                    </af:panelGroupLayout>
            </af:column>

JDEVELOPER:12.2.1.2.0

我应该使用其他方式来设置所选行吗?还是不应该使用valuechangelistener?还是其他?

1 个答案:

答案 0 :(得分:0)

向基于ViewObject的表添加selectBooleanCheckbox的最好方法是向您的viewObject添加布尔瞬态值。这样做将使您为每行保存一个不同的布尔值,并以与其他列值相同的方式轻松访问它。

要这样做:

1)将isSelected布尔瞬态属性添加到您的ViewObject:

<ViewAttribute
Name="isSelected"
IsSelected="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.lang.Boolean"
ColumnType="NUMBER"
AliasName="VIEW_ATTR"
SQLType="BIT"
Passivate="true">
<DesignTime>
  <Attr Name="_diagramName" Value=" "/>
</DesignTime>
<Properties>
  <SchemaBasedProperties>
    <CONTROLTYPE
      Value="check_box"/>
    <DISPLAYWIDTH
      Value="10"/>
    <DISPLAYHEIGHT
      Value="10"/>
  </SchemaBasedProperties>
</Properties>

2)将ViewObject作为表格拖放到视图中,您应该添加以下列:

<af:column sortable="false" id="c1" width="20">
    <af:selectBooleanCheckbox value="#{row.bindings.isSelected.inputValue}" label="#{row.bindings.isSelected.label}" id="sbc1"/>
</af:column>

3)在Bean操作中,轻松获取布尔值:

    Boolean val = (Boolean )JSFUtils.resolveExpression("#{row.bindings.isSelected.inputValue}");