Элемент меню p:splitButton с немедленным ="true" всегда удаляет последнюю строку p:dataTable

Элемент меню p:splitButton для функции удаления с немедленным ="true" всегда удаляет последнюю строку таблицы данных, даже когда средняя строка удаляется, она всегда удаляет последнюю строку. Как это вызвано и как я могу решить это? Приведенная ниже таблица данных находится внутри p:wizard, и мне нужно проверять значения полей таблицы данных только после нажатия следующей кнопки p:wizard.

<p:dataTable id="nomineeEducation" var="education" value="#{nominee.prospective.schoolHistoryToSave}" rowIndexVar="status"
        rendered="#{fn:length(nominee.prospective.schoolHistoryToSave) > 0}">
        <p:column headerText="School" width="250">
            <p:selectOneMenu value="#{education.lookupSchoolId}" required="true"
                requiredMessage="Education# #{status+1}: Please select School.">
                <f:selectItem itemLabel="--School--" itemValue="#{null}" />
                <f:selectItems value="#{selectItemList.schoolList}" />
            </p:selectOneMenu>
        </p:column>
        <p:column headerText="Degree Obtained" width="250">
            <p:selectOneMenu value="#{education.schoolAffiliations[0].educationId}" required="true"
                requiredMessage="Education# #{status+1}: Please select Degree Obtained.">
                <f:selectItem itemLabel="--Degree--" itemValue="#{null}" />
                <f:selectItems value="#{selectItemList.educationList}" />
            </p:selectOneMenu>
        </p:column>
        <p:column headerText="Dates Attended" width="150">
            <p:selectOneMenu value="#{education.underGradMonth}" required="true"
                requiredMessage="Education# #{status+1}: Please select Degree Month.">
                <f:selectItem itemLabel="--Month--" itemValue="#{null}" />
                <f:selectItems value="#{selectItemList.monthList}" />
            </p:selectOneMenu>
            <p:selectOneMenu value="#{education.underGradYear}" required="true"
                requiredMessage="Education# #{status+1}: Please select Degree Year.">
                <f:selectItem itemLabel="--Year--" itemValue="#{null}" />
                <f:selectItems value="#{selectItemList.yearList}" />
            </p:selectOneMenu>
        </p:column>         
        <p:column headerText="Action" width="150">
            <p:splitButton value="Select">
                <p:menuitem value="Delete" action="#{nominee.deleteEducation(education, false)}" update="nomineeEducation" icon="ui-icon-close"  immediate="true"/>
                <p:menuitem value="Add New" action="#{nominee.addEducation(false)}" update="nomineeEducation" icon="ui-icon-plus" 
                    rendered="#{fn:length(nominee.prospective.schoolHistoryToSave) eq (status+1)}" />
            </p:splitButton>
        </p:column>
    </p:dataTable>

1 ответ

Как сказано на http://forum.primefaces.org/viewtopic.php?f=3&t=38506, вы не можете отправлять данные на бэк, если вы используете immediate="true",

Обходной путь будет изменить ваш splitButton код для чего-то вроде:

 <p:splitButton value="Select">
   <p:menuitem value="Delete" 
               action="#{nominee.deleteEducation(education, false)}" 
               update="nomineeEducation" 
               icon="ui-icon-close"  
               process="@this"
               global="false"
               />
   <p:menuitem value="Add New" 
               action="#{nominee.addEducation(false)}" 
               update="nomineeEducation" 
               icon="ui-icon-plus" 
               rendered="#{fn:length(nominee.prospective.schoolHistoryToSave) eq (status+1)}" 
               />
 </p:splitButton>
Другие вопросы по тегам