我正在制作我的术语,我需要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打开一个模态)。所以,我需要的是:
那么,有没有办法用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” - 我正在等待这样的功能。)
答案 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>