当用户单击一行(dataTable)时,不要选择行

时间:2013-11-03 23:44:06

标签: jsf-2 primefaces datatable

我正在制作我的术语,我需要Primefaces的帮助。我正在使用JSF 2.0和Primefaces 4.0。

默认的PrimeFace DataTable非常棒,因为我们可以获得所选行的对象,我认为在纯JSF中我们无法做到这一点。

但我有一个问题,我希望用户无法选择一行,只需连续点击即可。我的意思是,当用户单击一行时,我得到点击行的值,这必须有一个链接。

当您在下面看到我的代码时,您会更清楚:

<p:dataTable id="minhaTabela" var="disciplina" value="#{disciplinaMBean.listaDisciplinasPesquisadas}" rowKey="#{disciplina.id}"                       
selection="#{disciplinaMBean.disciplinaSelecionada}" selectionMode="single">

    <p:column headerText="Nome" styleClass="pull-left">
        <a class="various fancybox.ajax" href="edit.jsf">
                     #{disciplina.nome}
        </a>    
    </p:column>

</p:dataTable>

正如你所看到的,我希望当用户连续点击时,他会重定向到“edit.jsf”(实际上,这只是用jQuery打开一个模态)。所以,我需要的是:

  1. 当用户连续点击时,不会选择该行。
  2. 该行必须有一个链接或类似的东西,它有一个“各种fancybox.ajax”类和一个链接。
  3. 那么,有没有办法用PrimeFaces dataTable做到这一点?我该如何解决这个问题?

    修改

    这是我的新代码,类似于@raylee的答案:

    <p:dataTable tableStyleClass="table table-hover" var="disciplina" value="#{disciplinaMBean.listaDisciplinasPesquisadas}" rowKey="#{disciplina.id}" selection="#{disciplinaMBean.disciplinaSelecionada}" selectionMode="single" emptyMessage="Nenhuma disciplina encontrada." >
    
        <p:column headerText="Nome" styleClass="pull-left">
            <p:lightBox iframe="true" width="100%" height="100%">
    
                <h:outputLink value="edit.jsf">
                    <h:outputText value="#{disciplina.nome}" />
                </h:outputLink>
    
                <f:facet name="inline">
                    <p:panel header="Editar disciplina">
                        <ui:include src="edit.xhtml" />
                    </p:panel>
                </f:facet>  
    
            </p:lightBox>
         </p:column>
         <p:ajax event="rowSelect" listener="#{disciplinaMBean.limparSelecionadosDataTable}"/>
    
    </p:dataTable>
    

    event="rowSelect",更接近最后一行,只删除所有选定的行(我不希望在用户点击时选择该行,这是我发现修复它的方式,因为PrimeFaces不要给我们一个属性“selectOrClickRow” - 我正在等待这样的功能。)

1 个答案:

答案 0 :(得分:1)

以下是使用PrimeFaces灯箱的示例。这是您需要的所有代码。没有jQuery或手动定义对话框。请注意,dataTable没有选择属性,因此用户无法选择行。

这就是您所需要的:

<p:dataTable var="report" value="#{tab.reports}" 
    resizableColumns="true" paginator="true" rows="30">

    <p:column headerText="Title" width="20%">

        <p:lightBox iframe="true" width="100%" height="100%">

            <h:outputLink value="#{report.URL}" title="#{report.title}">

                <h:outputText value="#{report.title}" />

            </h:outputLink>

        </p:lightBox>

    </p:column>

    ...

</p:dataTable>