Впервые использую JSF, и я немного растерялся из-за того, как работает getRowData()
.Все, что я обнаружил при поиске в Интернете, - это то, что он возвращает «текущую выбранную строку» в таблице данных, но я не мог выяснить, как она решает, какая строка выбрана.Например, у меня есть этот код для таблицы данных:
JSP:
<h:dataTable value="#{backing_student.eligibleCoursesList}" var="cdto"
binding="#{backing_student.eligibleCoursesDataTable}"
id="eligibleCoursesDataTable" rules="all" frame="box"
border="2">
<%--
oracle-jdev-comment:Faces.RI.DT.Class.Key:hu.elte.pgy2.BACNAAI.UranEJB.CourseDTO
--%>
<h:column>
<f:facet name="header">
<h:outputText value="Kurzuskód"
binding="#{backing_student.outputText7}"
id="outputText7"/>
</f:facet>
<h:outputText value="#{cdto.cid}"/>
</h:column>
<!-- couple more plain text columns like the above -->
</h:column>
<h:column>
<h:commandButton value="Felvétel"
actionListener="#{backing_student.addSelfToCourseListener}"/>
</h:column>
</h:dataTable>
Backing bean:
public class BackingStudent {
private HtmlDataTable eligibleCoursesDataTable;
private List<CourseDTO> eligibleCoursesList;
// ...
public void addSelfToCourseListener(ActionEvent actionEvent) {
HtmlCommandButton thisButton = (HtmlCommandButton)actionEvent.getComponent();
CourseDTO cdto = (CourseDTO)(eligibleCoursesDataTable.getRowData());
thisButton.setValue(cdto.getCid());
}
}
Это делает его таким, чтобы при каждом нажатии кнопкиКнопка в любой строке, текст всех кнопок изменяется на значение в первом столбце этой строки.Как именно getRowData()
знает, какую строку выбрать из таблицы?
Дополнительный вопрос: почему меняется текст каждой кнопки?