Обновление значений selectOneMenu внутри таблицы данных с использованием JSF 1.2 и Tomahawk

Существует таблица данных (таблица данных Tomahawk- https://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataTable.html), и внутри этой таблицы данных есть несколько столбцов с выпадающим меню (Tomahawk's selectOneMenu - https://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_selectOneMenu.html) внутри них. Когда я выбираю выпадающее меню, в нем есть атрибут onchange, который запускает ValueChangeListener (метод в управляемом компоненте). Я сделал это, потому что я хочу, чтобы второе выпадающее меню загружалось динамически, основываясь на значении первого меню. Проблема заключается в том, что когда я выбираю значение в первом меню первой строки таблицы данных, загружается значение во второй строке, но если я делаю то же самое во второй строке, раскрывающееся меню не вызывает ValueChangeListener. Хуже того: он не содержит выбранного значения в первом выпадающем меню. Таким образом, ValueChangeListener запускается ТОЛЬКО в первой строке.

Что я хочу: - Второе раскрывающееся меню в каждой строке таблицы данных, чтобы загрузить, когда первое раскрывающееся меню в той же строке выбрать новое значение - Сохранить выбранные значения в любом раскрывающемся меню при перезагрузке / обновлении страницы

Datatable:

<t:dataTable id="tabAnAn" var="anls" value="#{mybean.analyze}"
                    rowClasses="even,odd"
                    columnClasses="center,center,left,center,center,center,center, center, center"         
                    headerClass="hdmain"                
                    styleClass="sz90" >

                        <t:column headerstyleClass="headercls">
                            <f:facet name="header">
                                <h:selectBooleanCheckbox id="js_masterSelect" value="#{mybean.markall}" />
                            </f:facet>
                            <h:selectBooleanCheckbox styleClass="js_selectable" value="#{anls.dstb}" />
                        </t:column>

                        <t:column headerstyleClass="headercls">
                            <f:facet name="header">#{label.excs}</f:facet>
                            <h:outputText value="#{anls.excs}" />
                        </t:column>

                        <t:column headerstyleClass="headercls">
                            <f:facet name="header">#{label.ente}</f:facet>
                            <h:outputText value="#{anls.nm}" />
                        </t:column>

                        <t:column headerstyleClass="headercls">
                            <f:facet name="header">#{label.tpdc}</f:facet>
                            <h:outputText value="#{anls.tpdcnm}" />
                        </t:column>


                        <t:column headerstyleClass="headercls">
                            <f:facet name="header">Type</f:facet>
                            <h:selectOneMenu id="typeX" label="Type:" styleClass="tm8" 
                                    value="#{anls.tipoAnaliseSelecionada}" converter="cmbcon" 
                                    onchange="submit()" immediate="true" valueChangeListener="#{mybean.callListener}" >
                                 <f:selectItem itemValue="#{null}" itemLabel="" />
                                 <t:selectItems var="typeX" itemValue="#{typeX}" itemLabel="#{typeX.nome}" 
                                     value="#{mybean.tiposAnalises}"  />
                                <f:attribute name="thisAzy" value="#{anls}"/>
                             </h:selectOneMenu>
                        </t:column>


                        <t:column headerstyleClass="headercls">
                            <f:facet name="header">#{label.ps0n}</f:facet>
                            <h:selectOneMenu id="slctd" label="ps0n:" style="width:200px;" 
                                    value="#{anls.slctd}" converter="alzcon">
                                 <f:selectItem itemValue="#{null}" itemLabel="" />
                                 <t:selectItems var="az1n" itemValue="#{az1n}" itemLabel="#{az1n.usr.nm}" 
                                     value="#{anls.azixpo}" />
                             </h:selectOneMenu>
                        </t:column>

                    </t:dataTable>

Метод ValueChangeListener:

public void callListener(ValueChangeEvent event){
            FacesContext context = FacesContext.getCurrentInstance();
            TpzAzy ta = (TpzAzy)event.getNewValue();
            AnlDb ad = (AnlDb)event.getComponent().getAttributes().get("thisAzy");

            ad.setAnlDbTpzAzy(ta);

            if(mapType.containsKey(ta)){
                ad.setAzyCand(mapType.get(ta));
            } else {
                ad.setAzyCand(this.svc.getAzy(ta));
                this.mapType.put(ta, ad.getAzyCand());
            }

            this.showScreen = true;
            context.renderResponse();
        }

Пример страницы:

страница

0 ответов

Другие вопросы по тегам