У меня есть таблица данных с кнопкой редактирования для каждой строки.Когда нажата кнопка редактирования, я передаю значения этой строки в bean-компонент через f: setPropertyActionListener и открываю модальную панель с формой редактирования.
Все отлично работает.Я могу изменить значения и отправить.Я могу открыть другую строку, отредактировать значения, отправить, и все в порядке.
Но, если во время редактирования происходит сбой средства проверки одного ввода, и я закрываю модальную панель, когда я нажимаю, чтобы отредактировать другую строку,появятся значения предыдущего ряда.
Есть идеи?
SSCCE ниже:
Это таблица данных с кнопкой редактирования:
<a4j:region id="regionListAds">
<h:form id="listAdsForm">
<rich:dataTable id="adsTable"
value="#{AdminAdsCtrl.showAds.adsResults}"
var="ads">
(other values listed)
<rich:column>
<a4j:commandLink ajaxSingle="true" id="editlink"
actionListener="#{AdminAdsCtrl.formEditAd}"
reRender="editPanel, editAdsForm"
oncomplete="#{rich:component('editPanel')}.show()">
<f:attribute name="idArea"
value="#{ads.ad.idArea}" />
<f:setPropertyActionListener value="#{ads.ad}"
target="#{EditAdForm.ad}" />
<f:setPropertyActionListener value="#{ads.courses}"
target="#{EditAdForm.courses}" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>
</h:form>
</a4j:region>
Это модальная панель издания:
<a4j:region id="regionEditModalPanel">
<rich:modalPanel id="editPanel" autosized="true" width="700">
<h:form id="editAdsForm">
<table width="100%">
<tr>
<rich:column width="50%">
<h:inputText maxlength="300" id="email"
value="#{EditAdsForm.ad.email}"
validator="#{EditAdsForm.validateEmail}"
required="true" />
<br />
<rich:message errorLabelClass="errorMessages"
for="email" />
</rich:column>
</tr>
</table>
<br />
<table width="100%">
<tr>
<rich:column width="100%">
<a4j:commandButton
actionListener="#{AdminAdsCtrl.editAd}"
reRender="listAdsForm"
oncomplete="if (#{facesContext.maximumSeverity==null) #{rich:component('editPanel')}.hide(); javascript:window.scrollTo(0,0);" />
</rich:column>
</tr>
</table>
</h:form>
</rich:modalPanel>
</a4j:region>
Это AdminAdsCtrl и EditAdsForm
public class AdminAdsCtrl {
private CreateAdCtrl createAd = new CreateAdCtrl();
private ShowAdsCtrl showAds = new ShowAdsCtrl();
private EditAdsCtrl editAds = new EditAdsCtrl();
public void formEditAd(ActionEvent event) {
try {
int idArea = (Integer) event.getComponent().getAttributes().get(
"idArea");
editAds.createCombos(idArea);
} catch (...) {
(...)
}
}
public void editAd(ActionEvent event) {
try {
editAds.editAd();
showAds.updateAdsList();
} catch (...) {
(...)
}
}
}
public class EditAdsForm {
private Ad ad = new Ad();
private ArrayList<Courses> courses = new ArrayList<Courses>();
public Ad getAd() {
return ad;
}
public void setAd(Ad ad) {
this.ad = ad;
}
public ArrayList<Courses> getCourses() {
return courses;
}
public void setCourses(ArrayList<Courses> courses) {
this.cursos = courses;
}
public void validateEmail(FacesContext context, UIComponent component,
Object input) throws ValidatorException {
(Validation)
}