Да, вполне возможно, что я делаю это все время в своих таблицах данных.Тем не менее, вы должны иметь в виду, что каждая строка требует идентификации.Вы можете сделать это с объектами или параметрами для вашего слушателя:
//Backing Bean
@ViewScoped
public class TestBean
{
private ArrayList<Element> elements;
TestBean(){...}
public ArrayList<Element> getElements(){...} //Initialize things here
public class Element
{
/* getter/setter and initialization assumed */
private boolean selected;
private String radioSelection = "one";
private String[] radioChoices = new String[]{"one", "two", "three"};
public void selectMe(ActionEvent evt)
{
System.out.println("Selected -> " + this);
}
}
}
// HTML
<p:dataTable value="testBean.elements" var="element">
<p:column>
<p:commandButton value="Select" actionListener="#{element.selectMe}"
</p:column>
<p:column>
<h:selectBooleanCheckbox value="#{element.selected}" />
</p:column>
<p:column>
<h:selectOneRadio value="#{element.radioSelection}">
<f:selectItems
value="#{element.radioChoices}"
var="item"
itemLabel="#{item}"
itemValue="#{item}"
/>
</h:selectOneRadio>
</p:column>
</p:dataTable>
Вы можете (и можете захотеть) использовать параметр, используя идентификатор элементаили любой другой предпочитаемый вами шаблон.Главное помнить, что у каждой строки есть свой идентификатор, и вы создаете набор элементов, а не один элемент.Вот где вы, скорее всего, будете связаны.Видя, что каждая кнопка является гражданином первого класса, вы должны иметь с ней все, что захотите.
Редактировать: Я добавил пример «Радио / Флажок».Похоже, вы новичок в JSF, поэтому я бы посоветовал прочитать о классе SelectItem и изучить, как работают комбинированные списки и т. Д.Ключ, который нужно помнить (как я подчеркивал выше), заключается в том, что вы отображаете много компонентов, поэтому если вы разделяете значение, это может легко привести к нежелательному поведению.Инкапсулируйте все, и вы, как правило, в хорошей форме.) Вы также можете рассматривать привязки как возможное решение.Все зависит от того, где вы хотели бы написать свой код.