У меня проблема с получением проверенных значений из 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, как и ожидалось, независимо от области действия (СОБЫТИЕ или КОНВЕРСАЦИЯ).
Мне действительно нужна помощь, я ' Я застрял с этим ...