Jsf 2 当用户在一行(数据表)中单击时,不';不要选择行
我正在准备我的学期,我需要一些帮助。我正在使用JSF2.0和PrimeFaces4.0 默认设置是令人敬畏的,因为我们可以获得所选行的对象,这是我认为在纯JSF中无法做到的 但我有一个问题,我希望用户不能选择一行,只需单击一行。我的意思是,当用户在一行中单击时,我会得到单击行的值,这必须有一个链接 当您看到下面我的代码时,您会更好地理解:Jsf 2 当用户在一行(数据表)中单击时,不';不要选择行,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,我正在准备我的学期,我需要一些帮助。我正在使用JSF2.0和PrimeFaces4.0 默认设置是令人敬畏的,因为我们可以获得所选行的对象,这是我认为在纯JSF中无法做到的 但我有一个问题,我希望用户不能选择一行,只需单击一行。我的意思是,当用户在一行中单击时,我会得到单击行的值,这必须有一个链接 当您看到下面我的代码时,您会更好地理解: <p:dataTable id="minhaTabela" var="disciplina" value="#{disciplinaMBean.list
<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>
<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>
正如您所看到的,我希望当用户在一行中单击时,他将重定向到“edit.jsf”(实际上,这只是打开一个带有jQuery的模式)。所以,我需要的是:
<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”属性-我正在等待类似的功能).下面是一个使用PrimeFaces lightbox的示例。这就是您需要的全部代码。没有jQuery或手动定义对话框。请注意,dataTable没有选择属性,因此用户无法选择行
这就是您所需要的一切:
<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>
<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>
...
谢谢,但是有了这段代码,我可以得到“选中”(单击)的反对?以及rendered=“#{tab['class'].simpleName eq'ReportListTab'}”
?我觉得很奇怪,对不起。我本应该拿出那本书的。我在页面上有两个数据表。我在这里展示的仅在类名为ReportListTab时呈现。tabs列表实际上是一个名为Tab的抽象类列表。它们可以是ReportListTab或ReportObject。当该选项卡是ReportListTab时,它会列出报告并按上述方式单击报告以加载它(灯箱中显示的是BIRT报告)。当选项卡为ReportObject时,将打印出报告数据(自定义报告)。tab['class'].simpleName类似于Java代码中的tab.getClass().getSimpleName()。我在项目中使用您的答案,我会给您最好的答案,但您能帮我吗?您的代码很好,但对我来说,这不适用于整行。它只在我单击文本上方时起作用,但我希望当我单击行的任何部分时,显示lightbox。我将用我的新代码更新我的问题。谢谢