gpt4 book ai didi

jsf - 获取 p :dataTable of dynamic element 中的行号

转载 作者:行者123 更新时间:2023-12-04 20:47:02 24 4
gpt4 key购买 nike

我很好奇如何获取 <p:dataTable> 中元素的行号.

<p:dataTable id="userDataTable" value="#{bean.rows}" rowIndexVar="rowIndex">
<p:column headerText="RowCounter">
<p:commandLink id="row#{rowIndex+1}" actionListener="#{bean.getRows}">
<h:outputText value="Show Row #{rowIndex+1}" />
</p:commandLink>
</p:column>
</p:dataTable>

bean 角,扁 bean :
public void getRows(ActionEvent ae) {                   
System.out.println(ae.getComponent().getId().toString());
}

总是打印 row1 ,无论是哪个 <p:commandLink>被点击。我错过了什么?

最佳答案

至于你的具体问题,id在 View 构建期间评估 JSF 组件的属性。然而,#{rowIndex}仅在 View 渲染期间设置。因此,目前id属性被评估,#{rowIndex}无处设置,默认为 0 .这个问题与这里已经回答和解释的基本完全相同:JSTL in JSF2 Facelets... makes sense?请注意,这里有 只有一个 <p:commandLink>组件,而不是多个。只是它在生成 HTML 期间被多次重用(每次都使用相同的组件 ID!)。

要修复它,只需使用 id="row"反而。在这种特殊情况下,动态 ID 没有任何意义。 JSF 已经会自动添加行索引(检查生成的 HTML 输出以查看它)。我不知道你为什么会这样incorrectly thought您需要在此处手动指定行索引,因此很难提出正确的解决方案,因为您可能根本不需要它。另见 How can I pass selected row to commandLink inside dataTable?

对于您确实需要行索引的情况,您可以通过以下方式获取它:

Integer rowIndex = (Integer) ae.getComponent().getNamingContainer().getAttributes().get("rowIndex");
UIComponent#getNamingContainer()返回最接近的 naming container parent 在您的特定情况下是数据表本身, flavor 或 UIData 因此,它具有 rowIndex属性(property)。您也可以这样做,这更像是自我记录:
UICommand commandLink = (UICommand) ae.getComponent();
UIData dataTable = (UIData) commandLink.getNamingContainer();
Integer rowIndex = dataTable.getRowIndex();

关于jsf - 获取 p :dataTable of dynamic element 中的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16034301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com