f: setPropertyActionListener передает неправильное значение - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть таблица данных с кнопкой редактирования для каждой строки.Когда нажата кнопка редактирования, я передаю значения этой строки в 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)

}
...