JSF AJAX Запрос не работает с hx:panelDialog
Я написал следующий код,
<h:form id="PrefForm" >
<hx:commandExButton id="preferenceButton" type="button" style="align:right;" value="#{nls.preferenceLink }" title="#{nls.preferenceLinkTitle}" >
<hx:behavior event="onclick" behaviorAction="get" targetAction="prefPanelGroup"></hx:behavior>
<hx:behavior event="onclick" behaviorAction="show;stop" targetAction="preferenceSet"></hx:behavior>
</hx:commandExButton>
<hx:panelDialog id="preferenceSet" type="modal" styleClass="panelDialog" title="#{nls.preferenceDialogTitle}" >
<h:outputText styleClass="panelStartMessage" style="display:block;" value="#{nls.preferenceDialogWindowText}" />
<h:panelGroup id="prefPanelGroup" rendered="#{neoReport.hasSelectItem }" style="display:block;width:300px;height:360px;overflow:auto;" >
<hx:ajaxRefreshRequest id="refreshform" />
<h:selectManyCheckbox value="#{neoReport.selectedItems}" layout="pageDirection">
<f:selectItems value="#{neoReport.selectItems}" />
</h:selectManyCheckbox>
</h:panelGroup>
<hx:panelBox id="noCommandWindow" rendered="#{!neoReport.hasSelectItem }" style="display:block;width:300px;height:50px;" layout="lineDirection">
<h:outputText styleClass="outputText" id="cmdInfo" value="#{nls.noCommands}" />
</hx:panelBox>
<h:panelGroup id="buttonBox1" styleClass="panelStartBox" >
<hx:commandExButton id="submitPref" styleClass="commandExButton" type="submit" value="#{nls.submit}" action="#{neoReport.action}">
<hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" id="behaviorSubmitPref" />
</hx:commandExButton>
<hx:commandExButton id="CancelPref" styleClass="commandExButton" type="submit" value="#{nls.cancel}" action="neoReport">
<hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" id="behaviorCancelPref" />
</hx:commandExButton>
</h:panelGroup>
</hx:panelDialog>
</h:form>
Основная идея этого кода состоит в том, чтобы иметь кнопку на странице, когда пользователь нажимает, он должен получить последние данные из bean-компонента (путем извлечения файла, который постоянно обновляется) и заполнить объект List в databean, так что h:selectManyCheckBox может сделать это. Поэтому я добавил поведение с помощью команды ExButton, чтобы оно получало новые данные и отображало последние параметры в selectManyCheckBox. НО из этих двух hx: поведение работает только первый, вызывая функцию получения
<f:selectItems value="#{neoReport.selectItems}"
но это не рендеринг panelDialog дальше. Если я уберу поведение "get", он покажет диалоговое окно панели, но не с обновленными данными. Так что я не могу выяснить, что именно я здесь делаю. Может кто-нибудь помочь?
1 ответ
Прежде всего, я не знаю, что это за библиотека тегов. Вы должны указать это в тегах и / или в вопросе.
Вы должны иметь только один <hx:behavior>
тег, который делает всю работу за вас. В этом случае у вас должен быть метод, который вызывает все три метода. Можно ли с помощью этих тегов перерисовывать несколько компонентов с помощью AJAX - как targetAction="prefPanelGroup, preferenceSet"
?
Насколько я знаю, рендеринг preferenceSet
вызовет prefPanelGroup
перерисовывать тоже, так что бессмысленно перерисовывать отдельно.
Также рендеринг prefPanelGroup
будет работать только сообщая <hx:behavior>
пометить более точный идентификатор, как "PrefForm:prefPanelGroup"
,
Надеюсь, это поможет, Даниэль