Tengo un databale en index.xhtml¿Cómo obtener el índice de fila seleccionado en la tabla de datos JSF?
<h:dataTable style="border: solid 2px black;"
value="#{IndexBean.bookList}" var="item"
binding="#{IndexBean.datatableBooks}">
<h:column>
<h:commandButton value="Edit" actionListener="#{IndexBean.editBook}">
<f:param name="index" value="#{IndexBean.datatableBooks.rowIndex}"/>
</h:commandButton>
</h:column>
</h:dataTable>
Mi frijol:
@ManagedBean(name="IndexBean")
@ViewScoped
public class IndexBean implements Serializable {
private HtmlDataTable datatableBooks;
public HtmlDataTable getDatatableBooks() {
return datatableBooks;
}
public void setDatatableBooks(HtmlDataTable datatableBooks) {
this.datatableBooks = datatableBooks;
}
public void editBook() throws IOException{
int index = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("index").toString());
System.out.println(index);
}
}
Mi problema es que siempre me sale el mismo índice en el registro del servidor a pesar de que haga clic en los diferentes botones de edición. Imagine que hay una colección que se suministra a la tabla de datos. No lo he demostrado en Bean.
Si cambio el ámbito de ViewScope a RequestScope, funciona bien. ¿Cuál puede ser el problema con @ViewScoped
? Gracias de antemano :)
EDIT:
<h:column>
<h:commandButton value="Edit" actionListener="#{IndexBean.editBook}" />
</h:column>
public void editBook(ActionEvent ev) throws IOException{
if (ev.getSource() != null && ev.getSource() instanceof HtmlDataTable) {
HtmlDataTable objHtmlDataTable = (HtmlDataTable) ev.getSource();
System.out.println(objHtmlDataTable.getRowIndex());
}
}
relacionadas: http://stackoverflow.com/questions/4994458/how-can-i -pass-a-parameter-to-a-commandlink-inside-a-datatable – BalusC