Jsf 获取动态元素的p:dataTable中的行号
我很好奇如何获取Jsf 获取动态元素的p:dataTable中的行号,jsf,primefaces,Jsf,Primefaces,我很好奇如何获取中元素的行号 <p:dataTable id="userDataTable" value="#{bean.rows}" rowIndexVar="rowIndex"> <p:column headerText="RowCounter"> <p:commandLink id="row#{rowIndex+1}" actionListener="#{bean.getRows}"> <h:outp
中元素的行号
<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>
无论单击哪个
,始终打印第1行。我遗漏了什么?至于您的具体问题,JSF组件的id
attribtue将在视图构建期间进行评估。但是,{rowIndex}
仅在视图渲染期间设置。因此,在计算id
属性时,{rowIndex}
未被设置,默认为0
。这个问题本质上与这里已经回答和解释的理由完全相同:因此请注意,只有一个组件,而不是多个组件。只是它在生成HTML时被多次重用(每次都使用相同的组件ID!)
要修复它,只需使用id=“row”
。在这种特殊情况下,动态ID没有意义。JSF已经自动在行索引前加上前缀(检查生成的HTML输出以查看它)。我不知道为什么您需要在这里手动指定行索引,因此很难提出正确的解决方案,因为您可能根本不需要它。另见
对于确实需要行索引的情况,可以通过以下方式获得:
Integer rowIndex = (Integer) ae.getComponent().getNamingContainer().getAttributes().get("rowIndex");
UIComponent#getNamingContainer()
返回最接近的父级,在您的特定情况下,该父级是数据表本身,具有特殊的风格,或者反过来又具有rowIndex
属性。您也可以这样做,这是一种更自我记录的方式:
UICommand commandLink = (UICommand) ae.getComponent();
UIData dataTable = (UIData) commandLink.getNamingContainer();
Integer rowIndex = dataTable.getRowIndex();
非常感谢您的提示和易于理解的解释!非常感谢!
UICommand commandLink = (UICommand) ae.getComponent();
UIData dataTable = (UIData) commandLink.getNamingContainer();
Integer rowIndex = dataTable.getRowIndex();