多选奇怪的行​​为

时间:2013-07-25 08:53:59

标签: jsf-2 primefaces

我的数据表定义如下:

   <p:dataTable id="sifarnikTable" rowIndexVar="rowIndex" 
                    value="#{attrsBean.listOfDataBeans}" editable="true" 
                    selectionMode="multiple" selection="#{attrsBean.selektovani}"
                    widgetVar="datatableWidget" var="row" rowKey="#{row.primaryKey}"
                    paginator="true" paginatorPosition="bottom" 
                    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
                    currentPageReportTemplate="{startRecord} - {endRecord} / {totalRecords}"
                    emptyMessage="#{messages['datatable.emptymessage']}" rows="15"
                    sortMode="multiple" paginatorAlwaysVisible="false" styleClass="newStyle"
                    filteredValue="#{attrsBean.filteredDatatableList}">


                    <p:ajax event="rowSelect" />
                    <p:ajax event="rowUnselect" />

                    <p:ajax event="rowEdit" listener="#{attrsBean.onEdit}"
                        update=":aswdatatable:form:messages, :aswdatatable:form:sifarnikTable, :aswdatatable:form:noviBtn" />

                    <p:ajax event="rowEditCancel" listener="#{attrsBean.onCancel}"
                        update=":aswdatatable:form:messages" />

   <p:columns id="columns" var="column" value="#{attrsBean.columns}" 
                style="#{column.css}" width="#{column.width}" 
                sortBy="#{row[column.property]}" 
                filterStyle="#{attrsBean.columnCSS}"
                filterBy="#{attrsBean.showFilter==false ? null : row[column.property]}">
                <f:facet name="header">
                    <h:outputText value="#{column.header}" />
                </f:facet>
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{row[column.property]}" />
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{row[column.property]}" style="width:96%"></p:inputText>
                    </f:facet>
                </p:cellEditor>

            </p:columns>
                <p:column style="width:6px" exportable="false" >                
                    <p:rowEditor />

                </p:column>
                <p:column  style="width:6px" exportable="false">
                    <div
                        onclick="datatableWidget.unselectAllRows();datatableWidget.selectRow(#{rowIndex}, false);">
                        <h:panelGroup layout="block">
                            <p:cellEditor>
                                <f:facet name="output">

                                    <p:commandLink id="deleteBtn"
                                        onclick="datatableWidget.unselectAllRows();datatableWidget.selectRow(#{rowIndex}, false);brisanjeWidget.show()"
                                        process="@this"
                                        update=":aswdatatable:form:brisanjeDisplay, :aswdatatable:form:sifarnikTable"
                                        styleClass="ui-icon ui-icon-trash">

                                        <f:setPropertyActionListener
                                            target="#{attrsBean.modelForDelete}" value="#{row}" />
                                    </p:commandLink>
                                </f:facet>
                                <f:facet name="input">
                                    <h:outputText value="" />

                                </f:facet>
                            </p:cellEditor>
                        </h:panelGroup>
                    </div>
                </p:column>


            </p:dataTable>

问题是当我选择项目时行为有点奇怪。有时,当我点击特定行时,它不会选择它,有时它会这样做,有时我需要多次单击才能选择一行。有人可以帮忙吗?也许我没有看到什么。

相关的支持bean代码是:

@PostConstruct
public void init() {
   ...
   selektovani = new ArrayList<BasicModel>();
   ...  
}

1 个答案:

答案 0 :(得分:0)

我能找到的唯一答案是覆盖datatable.js中的onRowClick函数。更改符合if ($(event.target).is("td,span:not(.ui-c)")) {行,我刚刚更改为if ($(event.target).is("td,span:not(.ui-c),.ui-cell-editor-output")) {,现在可以正常使用了。我知道这不是好办法。