我想获取数据表行的 id,以在同一表格单元格中的隐藏按钮上调用 click()。这样做是因为所有按钮都必须看起来像 h:commandButton 而我不能强制 p:commandButton 看起来像它们。并且 h:commandbutton 没有 oncomplete 事件。我知道我可以使用 DataModel,但还有其他方法(使用 JS、JQuery)吗?当我输入 hardoced id (p:table:4:hiddenButton) 时一切正常,但是如何获取每个单元格的行号?
<h:form id="p">
<h:dataTable value="#{bean.paymentList}" var="pmt" id="table" >
...
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.action}" />
</f:facet>
<h:commandButton type="button" value="#{bundle.approve}"
onclick="document.getElementById('p:table:??:hiddenButton').click();" />
<p:commandButton id="hiddenButton" value="hidden" style="display: none;"
oncomplete="if (#{pmt.errorsNum} > 0) {
return confErrDial.show();
} else {
return confDial.show();};">
<f:setPropertyActionListener value="#{pmt.id}" target="#{bean.holder}" />
</p:commandButton>
</h:column>
</h:dataTable>
</h:form>
编辑:
好的,我使用 JQuery 做了一些技巧,它可能不太好,但可以。
我做了什么:我将 id 添加到 h:commandButton 并在 onclick 事件中我得到 h:commandButton 的 id 并将其 id 替换为隐藏 p:commandbutton 的 id,所以它的代码现在是:
<h:commandButton id="button" type="button" value="#{bundle.approve}"
onclick="document.getElementById(($(this).attr('id')).replace('button','hiddenButton')).click();"
也许有人知道更好的解决方案。
PS:这很奇怪,因为 $(this).parent().attr('id') 为空。我认为它有一些东西没有创建带有 id p:table:0 p:table:1 等的元素......