【问题标题】:Tooltip for each row in data table数据表中每一行的工具提示
【发布时间】:2023-03-21 06:09:01
【问题描述】:

这个问题尖叫着与JSF 2.0 + Primefaces 2.x: Tooltip for datatable row 重复,但由于这个老问题对我来说没有有效/令人满意的解决方案,而且没有办法(?)引起人们对它的关注,所以我打开了这个新问题。

这很简单: 我有一个dataTable(使用 JSF 标准或使用 primefaces),我想为每一行添加不同的工具提示(不仅仅是其中的一个字段!)。

到目前为止我尝试了什么:

<pe:tooltip value="This is row number #{rowIndex}"
    for="@(#table1 tr[role=row][data-ri=#{rowIndex}])" 
    atPosition="top center" myPosition="bottom center"
    shared="true" />

其中#table1是我的数据表的ID。我之所以想到这是因为this

来自JSF 2.0 + Primefaces 2.x: Tooltip for datatable row 的两个解决方案:第一个解决方案有效,但仅适用于一个字段/ id,而不适用于整行。第二个解决方案对我根本不起作用。

而且我 100% 确定 primefaces 和 primefaces 扩展都对我有用,我已经测试过了。

【问题讨论】:

标签: jsf-2 primefaces datatable tooltip primefaces-extensions


【解决方案1】:

根据这条评论https://stackoverflow.com/a/13327334/4851983(感谢 BalusC) 让 primefaces 自动链接对象。我可以显示 textArea Primefaces 3.5 的工具提示,如下所示

<p:dataTable id="commentsTable"
         value="#{historyReq.commentsFromReq}" var="comment"
         emptyMessage="#{localeMsg.roles_table_empty}" 
         rows="10"                                                                                                                                                               
         styleClass="myTable"
         rowIndexVar="rowIndex">

<p:column headerText="HEADER A">
    <h:outputText value="#{bean.valorA}" />
</p:column> 

<p:column headerText="#{HEADER B}">                                                
        <p:inputTextarea  id="txtArea"  cols="45" rows="1"   
                           value="#{bean.valorB}" 
                           readonly="true" 
                           disabled="false"  
                           autoResize="false">
            <f:converter converterId="commentsConverter" />
        </p:inputTextarea>                                                                                                
         <p:tooltip for="txtArea" value="This is row number #{rowIndex}" />             
</p:column>    

【讨论】:

  • 如果我没有记错的话,他的示例是静态示例,而您正试图将 id 放在会一遍又一遍地重复的组件上。因此,在每一行上,您都有一个具有相同 id 的文本区域,这是行不通的。
【解决方案2】:

您也可以在不使用 primefaces 扩展的情况下做到这一点。此示例代码适用于我的 primefaces 5.2。 请注意,在 primefaces 5.2 中,p:dataTable 属性是 rowIndexVar 而不是上面示例中的 rowIndex。

<h:form id="idform">

<p:dataTable var="komp" 
    id="idDataTable" 
    value="#{kompselect.listKomponenten}"
    rowIndexVar="rowIndex"
    selection="#{kompselect.selectedKomponente}"
    rowKey="#{komp.name}">
    <p:column>
        <h:outputText id="otSelKomponente" value="#{komp.name}" />
        <p:tooltip  rendered="#{komp.displayToolTip}"
                for="idForm:iddataTable:#{rowIndex}:otSelKomponente"
                value="this is my Tooltip"/>

    </p:column>
</p:dataTable>

【讨论】:

    【解决方案3】:

    我做了一些测试,这种方法效果很好:

    <p:dataTable var="entry" value="#{....}" styleClass="myTable" rowIndex="rowIndex">
        <p:column headerText="Header 1">
            <h:outputText value="#{entry.value1}" />
        </p:column>
    
        <p:column headerText="Header 2">
            <h:outputText value="#{entry.value2}" />
            <pe:tooltip value="This is row number #{rowIndex}" forSelector=".myTable tr[role=row][data-ri=#{rowIndex}]"
                shared="true" atPosition="top center" myPosition="bottom center" showDelay="500" />
        </p:column>
    </p:dataTable>
    

    请注意,为了将 data-ri 属性放置在数据表行上,您需要添加属性 rowIndex (rowIndex="rowIndex")。

    它也适用于

    <p:tooltip for="@(.myTable tr[role=row][data-ri=#{rowIndex}])" value="This is row number #{rowIndex}" />  
    

    【讨论】:

    • 效果很好:选择器适用于整行,因此不必为每一列定义它。标准用例是有例如值="entry.tooltiptext"。这应该被标记为正确答案。
    • 我正在尝试做同样的事情,但我收到了Cannot convert rowIndex of type class java.lang.String to int。有什么想法吗?
    • 改成rowIndexVar
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2016-02-11
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多