Web applications 使用datatable列中的commandbutton在JSF中传递行索引
我在datatable列中添加了一个commandbutton,如下所示。单击按钮时,记录的id将用于更新数据库中的其他一些记录。以下是我尝试过的:Web applications 使用datatable列中的commandbutton在JSF中传递行索引,web-applications,jsf,datatable,Web Applications,Jsf,Datatable,我在datatable列中添加了一个commandbutton,如下所示。单击按钮时,记录的id将用于更新数据库中的其他一些记录。以下是我尝试过的: <ice:dataTable value="#{myBean.storedRecords}" var="record" rows="10"> <h:column> <h:commandButton id="myButton#{record.id}" value="#{record.id}"
<ice:dataTable value="#{myBean.storedRecords}" var="record" rows="10">
<h:column>
<h:commandButton id="myButton#{record.id}" value="#{record.id}"
actionListener="myBean.buttonActionListener" />
</h:column>
</ice:dataTable>
在输出中,我可以看到该值是记录的id。但是,在buttonAction侦听器方法中,按钮的id似乎只有“myButton”,而没有记录的id
请您指出如何动态设置按钮的id。或者,您可以建议一种方法,通过单击按钮将该行的索引传递给服务器
非常感谢您的帮助。返回数据表,而不是列表
private DataModel storedRecords;
public MyBean() {
storedRecords = new ListDataModel(recordDAO.listStoredRecords());
}
// ...
然后,您可以通过内部bean的操作方法获得当前行
public String buttonAction() {
StoredRecord storedRecord = (StoredRecord) storedRecords.getRowData();
// ...
return "outcome";
}
请注意,我隐式地提示使用action
而不是按钮上的actionListener
。以下是我的解决方案
通过调试和谷歌搜索,我意识到我HtmlDataTable是HtmlCommandButton的祖父母(!)。HtmlDataTable扩展了UIData类。UIData有一个公共方法来获取当前行中的存储值
public void btnActionListenerMethod(Action e) {
if(e.getSource() instanceof HtmlCommandButton) {
HtmlCommandButton button = (HtmlCommandButton) e.getSource();
UIData dataTable = (UIData) button.getParent().getParent();
MyRecord record = (MyRecord) dataTable.getRowData();
// ......
}
}