0

我正在做我的学期论文,我需要一些有关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. 该行必须有一个链接或类似的东西,它有一个类“various fancybox.ajax”和一个链接。

那么,有一种方法可以使用 PrimeFaces 数据表来做到这一点吗?我该如何解决这个问题?

编辑

这是我的新代码,类似于@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” - 我正在等待这样的功能)。

4

1 回答 1

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>
于 2013-11-04T19:15:56.253 回答