Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 当用户在一行(数据表)中单击时,不';不要选择行_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 2 当用户在一行(数据表)中单击时,不';不要选择行

Jsf 2 当用户在一行(数据表)中单击时,不';不要选择行,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,我正在准备我的学期,我需要一些帮助。我正在使用JSF2.0和PrimeFaces4.0 默认设置是令人敬畏的,因为我们可以获得所选行的对象,这是我认为在纯JSF中无法做到的 但我有一个问题,我希望用户不能选择一行,只需单击一行。我的意思是,当用户在一行中单击时,我会得到单击行的值,这必须有一个链接 当您看到下面我的代码时,您会更好地理解: <p:dataTable id="minhaTabela" var="disciplina" value="#{disciplinaMBean.list

我正在准备我的学期,我需要一些帮助。我正在使用JSF2.0和PrimeFaces4.0

默认设置是令人敬畏的,因为我们可以获得所选行的对象,这是我认为在纯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>
<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的模式)。所以,我需要的是:

  • 当用户单击某一行时,该行不会被选中
  • 行必须有一个链接或类似的东西,它有一个类“variable fancybox.ajax”和一个链接 那么,有一种方法可以用PrimeFaces数据表实现这一点吗?如何解决此问题?

    编辑 这是我的新代码,类似于@raylee answer:

    <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。我将用我的新代码更新我的问题。谢谢