Я работаю с Primefaces 5.3.Прайсы p: selectOneMenu или p: selectBooleanCheckbox не запускает change-event в зависимости от того, использую ли я h: form
Во-первых, я реализовал функциональность, чтобы изменить видимость ар: selectOneMenu в зависимости от значения ар: selectBooleanCheckbox согласно этому сообщению:
Enabling and disabling components via select checkbox
Это работает до сих пор, если я использую час: формы ,
Далее я хотел обновить значения в компоненте, выбранном в p: selectOneMenu. Здесь начинается мой вопрос: даже если я использую p: ajax для явного вызова слушателя, он не будет вызван. Это мой код:
<h:panelGrid>
<p:selectOneMenu value="#{schedulerCDIBean.selectedParentTask}" var="parentTask" id="taskDependence" disabled="#{task.dependsOn != 'true'}">
<p:ajax event="change" listener="#{schedulerCDIBean.taskToAddListener}"/>
<f:selectItems id="taskDependenceItems" value="#{schedulerCDIBean.taskWebDataObjectList}" var="item" itemLabel="#{item.taskName}"
itemValue="#{item}" />
<p:column>
<h:outputText value="#{parentTask}"/>
</p:column>
</p:selectOneMenu>
</h:panelGrid>
А вот как включить/отключить selectOneMenu:
<p:selectBooleanCheckbox id="dependsOnTask" value="#{task.dependsOn}" itemLabel="Depends On">
<p:ajax update="taskDependence" process="@this"/>
</p:selectBooleanCheckbox>
Все это живет внутри ар: вкладку р: accordionPanel где «задача» является вар из мой DataObject-List.
Как отметил @BalusC в этом посте: commandLink/commandButton/ajax backing bean action/listener method not invoked (Возможные причины: 2),
"Вы не можете вкладывать несколько компонентов UIForm друг в друге."
Итак, если я удалю директиву h: form, вызов слушателя в компоненте будет работать. Но теперь значение p: selectBooleanCheckbox всегда установлено на «false», и, таким образом, компонент не обновляется до видимого.
Я нашел сообщение here, где OP имел ту же проблему и решил его, добавив директиву h: form.
EDIT: Мой «форма» является УИ: состав и начинается, как этот <ui:composition template="/templates/pages/mainPage.xhtml">
, где mainPage.xhtml содержит ч: голову и включает в себя «header.xhtml» с использованием Ui: включают в себя, и есть ах: форма , Но эта h: форма уже закрыта раньше, поэтому проблему здесь нет.
Ну, я не хочу идти с добавлением формы h: еще раз, поскольку это приводит к неуказанному поведению. Но что я делаю неправильно, если мои значения p: selectBooleanCheckbox установлены неправильно?
Благодарим за помощь!
UPDATE
Проблема была не час: форма, как это на самом деле не было вложено. Теперь я все еще застрял с слушателями для p: selectOneMenu, так как они не вызываются. Я также попытался установить partialSubmit="true"
на <p:ajax />
, что не привело к решению до сих пор.
У вас есть установщики/добытчики на 'selectedParentTask'? Как выглядит ваш метод слушателя 'taskToAddListener'? Вы пытались использовать 'p: remoteCommand'? – chaeschuechli
@chaeschuechli Да, у меня есть геттер/сеттер, а подпись слушателя выглядит так: 'public void taskToAddListener (событие AjaxBehaviorEvent)'. Но проблема связана с p: selectBooleanCheckbox (task.dependsOn), где значение всегда установлено на «false». Это не с выделеннойParentTask, так как я избавился от формы h:. Я просто попытался следующий подход с р: remoteCommand '<р: remoteCommand ID = "ет" ActionListener = "# {schedulerCDIBean.taskToAddListener}"/> \t \t \t \t \t <е: Аякс событие = "изменение" OnEvent =» rm "/>', который тоже не работает. Спасибо за вашу помощь – danny
В вашем теге inner selectBooleanCheckbox вы должны вызвать метод прослушивателя, который обновляет логическое значение. –
chaeschuechli