JSF selectManyCheckbox не обновляет выбранные значения - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема с получением проверенных значений из selectManyCheckBox. У меня есть некоторые параметры с некоторыми значениями, которые я хочу отредактировать, когда я нажимаю на кнопку редактирования, открывается модальное окно, в котором я вижу имя параметра, значение и флажок. Поскольку редактирование под вопросом, параметры имеют некоторое значение, и некоторые из них проверяются, а другие нет. Я хотел бы и ожидать после изменения значения параметра и checkBox-value (check / unchecked) получить это изменение в моем backingBean, но я не получаю измененное значение в selectManyChecbox, но я получаю измененное значение параметра.

Это мой editButton:

<uc:toolbarButton id="Edit_Param" title="#{coreLabels.editLabel}"                                                 action="myBean.prepareEditDefaultParams"
operation="edit"
reRender="editDefaultParamsPanel"
data="#{myBean.success}"
oncomplete="if (data) {UTILIS.modals.show('editDefaultParamsPanel');}"
modalPanelId="editDefaultParamsPanel"
enabled="#{myBean.canEditDefaultParams}"
buttonRendered="${privilegeBean.hasSystemPrivilege('EDIT')}"/>

Когда я нажимаю на эту кнопку, он открывает этот модал:

<ui:component xmlns:ui="http://java.sun.com/jsf/facelets"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:f="http://java.sun.com/jsf/core">
<uc:modal modalId="editDefaultParamsPanel"
              header="#{myBean.header}"
              bean="#{myBean}"
              reRender="#{reRender}"
              width="700px"
              minWidth="700px"
              data="#{myBean.error}">
        <ui:define name="modal-body">
            <h:panelGrid columns="2">
                <some:editParameters otherBean="#{otherBean}"
                                     someId="#{otherBean.someId}"/>
                <h:panelGroup id="singletonsParams">
                    <h:selectManyCheckbox value="#{myBean.selectedSingletons}">
                        <f:selectItems value="#{myBean.singletonsParamsMap}"/>
                    </h:selectManyCheckbox>
                </h:panelGroup>
            </h:panelGrid>
        </ui:define>
    </uc:modal>
</ui:component>

Это myBean:

@Name ("myBean")
@Scope (ScopeType.EVENT)
public class MyBean extends MYBaseUI implements SomeBean
{

 private List<String> selectedSingletons; //getter and setter
 private Map<String,String> singletonsParamsMap; //getter and setter

public void populateSelectedSingletons(){
selectedSingletons = new ArrayList<>();
selectedSingletons.add("1111");
}

public void populateSingletonsParamsMap(){
singletonsParamsMap = new LinkedHashMap<>();
singletonsParamsMap.put("firstParam","1111");
singletonsParamsMap.put("secondParam","2222");
singletonsParamsMap.put("thirdParam","3333");
}

этот метод в myBean и вызывается до того, как открывается модальное окно:

public void prepareEditDefaultParams()
{
populateSelectedSingletons()
populateSingletonsParamsMap()
header = getModalPanelHeaderString(TSActionType.UPDATE.getLabel(), ObjectType.PARAM_VALUES.getId());
success = true;
}

в этом методе я заполняю данные List и Map данными, поэтому, когда открывается модальное окно, я вижу, что firstParam проверен, а secondParam и thirdParam нет check.

Итак, что я делаю дальше, я изменяю значение параметра, а также меняю значение checkBox (я снимаю флажок с checkBox «firstParam» и проверяю «secondParam» и «thirdParam»). Я ожидаю получить измененное значение, а также изменить checkBox (список selectedSingletons теперь должен содержать «2222» и «3333»). Я получаю изменение в значении, но я не получаю изменение в checkBox. Запрос на отправку отправляется при нажатии кнопки «Отправить» со значениями «2222», «3333» (я проверял).

Этот метод вызывается при отправке формы (если вы хотите сохранить измененные значения) и также находится в myBean:

 @Override
    public void action()
    {
        OtherBean bean = (OtherBean)Component.getInstance(OtherBean.class);
        List<String> shouldHaveSelectedCheckboxValues = selectedSingletons;
        bean.updateParams(someOtherBean.getCurrentObject());
    }

, но я получаю сообщение об ошибке: «Ошибка проверки: значение недопустимо;»

Поэтому я изменил область действия MyBean на:

@Name ("myBean")
@Scope (ScopeType.CONVERSATION)
public class MyBean extends MYBaseUI implements SomeBean

но затем в методе action () я получаю ListselectedSingletons, заполненные старыми значениями ("1111"), а не теми, которые я выбрал ("2222" и "3333").

Может кто-нибудь помочь мне с эта проблема, я не понимаю, в чем проблема и почему это происходит, почему я получаю старые значения, а не новые?

ПРИМЕЧАНИЕ

Когда я использую:

 <h:selectBooleanCheckbox value="#{myBean.singleton}"/>

и установите его в

@Name ("myBean")
@Scope (ScopeType.EVENT)
public class MyBean extends MYBaseUI implements SomeBean
{
private Boolean singleton; //getter and setter

prepareEditDefaultParams(){
singleton=true;
} 

action(){
Boolean iReceiveValue = singleton;
}

Я получаю значение этого checkBox, как и ожидалось, независимо от области действия (СОБЫТИЕ или КОНВЕРСАЦИЯ).

Мне действительно нужна помощь, я ' Я застрял с этим ...

...