За последние 3 дня я пытался заставить следующее работать. У меня есть datatable, который получает данные от бэк-бэка и показывает столбец с 3 переключателями. Страница отображается так, как ожидалось, и переключатели получают правильное значение. Отправка формы однако не пойдет так, как предполагалось. Всякий раз, когда я отправляю форму, значения для соответствующего объекта устанавливаются в значение последнего объекта в таблице. Как ни странно, когда я просматриваю форму, отправляемую через Fiddler, правильные значения отправляются вместо дублирования значения объекта в последней строке. Я предполагаю, что идентификатор selectOneRadio имеет какое-то отношение, но установка динамического значения для идентификатора приводит к ошибке.Отправить rich: datatable с столбцом h: selectOneRadio
Заранее благодарю вас и сообщите мне, если вам нужна дополнительная информация.
<rich:dataTable id="facilities_organisation"
var="orgFacility"
value="#{organisationFacilitiesHandler.findAllFacilitiesForCurrentOrganisation}">
<rich:column>
<f:facet name="header">
<h:outputText value="Naam" />
</f:facet>
<h:outputText value="#{orgFacility.facility.name}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Beschikbaar?" />
</f:facet>
<h:selectOneRadio id="facility" value="#{orgFacility.availabilityType.id}">
<f:selectItems value="#{organisationFacilitiesHandler.findAllAvailabilityTypes}" />
</h:selectOneRadio>
</rich:column>
</rich:dataTable>
Backbean
private Organisation activeOrganisation = null;
private List<OrganisationFacility> facilities = new ArrayList<OrganisationFacility>();
public Organisation getActiveOrganisation() {
return this.activeOrganisation;
}
public void setActiveOrganisation(Organisation organisation) {
activeOrganisation = organisation;
}
public List<OrganisationFacility> getFindAllFacilitiesForCurrentOrganisation() {
this.facilities = new ArrayList<OrganisationFacility>();
if (this.activeOrganisation != null) {
//Error handling omitted
this.facilities = facilityManager.findAllFacilitiesForOrganisation(this.activeOrganisation);
}
return this.facilities;
}
public void setFindAllFacilitiesForCurrentOrganisation(List<OrganisationFacility> facilities) {
//This function doesn't ever seem to get called...
LOG.debug("setFindAllFacilitiesForCurrentOrganisation was called");
}
public List<SelectItem> getFindAllAvailabilityTypes() {
List<SelectItem> selectItems = new ArrayList<SelectItem>();
//Error handling omitted
List<AvailabilityType> types = this.facilityManager.findAllAvailabilityTypes();
for (AvailabilityType t : types)
selectItems.add(new SelectItem(t.getId(), t.getLabel() + (t.getName().equals("specific") ? " opleiding" : "")));
return selectItems;
}
public String save() {
AvailabilityType defaultType = facilityManager.defaultAvailabilityType();
if (defaultType == null)
return "showOrganisation";
for (Iterator<OrganisationFacility> it = this.facilities.iterator(); it.hasNext();) {
OrganisationFacility f = it.next();
//Business code omitted for readability
//At this point every f.AvailabilityType has already been duplicated from the last object in the datatable
}
return "showOrganisation";
}
Добавить ' ' 'в час: selectOneRadio' –
Я попробовал , но это также имело некоторые проблемы. Спасибо за комментарий. Тем временем я придумал решение. Я добавлю это как ответ, если кто-то совершит ту же ошибку, что и я. –