richfaces a4j: событие поддержки неожиданный вызов внутренних методов
Я работаю над приложением JSF 1.2 с Richfaces 3.3. У меня есть всплывающее окно, которое содержит rich:extendedDataTable
, Когда я щелкаю строку в таблице, я хочу включить или отключить кнопку, и я использую a4j:support event="onRowClick"
,
Вот некоторый код:
<h:form>
<rich:panel id="main">
<a4j:commandButton id="completed" value="Completed"
rendered="#{bean.completedCase}" />
<a4j:commandButton value="Open"
oncomplete="#{rich:component('popupId')}.show(...)">
</a4j:commandButton>
<rich:modalPanel id="popupId">
<a4j:region>
<rich:extendedDataTable id="source" value="#{bean.sourceItems}"
var="sourceItem" selectionMode="single" >
<a4j:support event="onRowClick" eventsQueue="pickQueue" reRender="copy" >
<f:setPropertyActionListener value="#{sourceItem}"
target="#{bean.sourceSelection}" />
</a4j:support>
....
</rich:extendedDataTable>
<a4j:commandButton id="copy" value="Copy" />
</a4j:region>
<a4j:commandButton value="Ok" reRender="completed"
oncomplete="#{rich:component('popupId')}.hide();return false;">
</a4j:commandButton>
</rich:modalPanel>
</rich:panel>
</h:form>
Проблема в том, что когда я щелкаю строку, в бэкэнде вызываются некоторые методы, используемые для рендеринга кнопки: rendered="#{bean.completedCase}"
, но кнопка находится не во всплывающем окне, а на странице за всплывающим окном. Любая идея, почему называются другие методы, чем те, которые используются для таблицы?
2 ответа
Не рекомендуется иметь вложенные <h:form>
с, но мы можем иметь несколько <h:form>
s, попробуйте изменить свой код таким образом, чтобы <h:commandButton>
в одном h:form
и <h:modalPanel>
в другой форме
Надеюсь это поможет. Вы также можете попробовать с <a4j:form>
за modalPanel
Попробуйте использовать ajaxsingle="true"
на ваше a4j:support
тег. Так как вы используете h:form
когда onrowclick запускает запрос, все компоненты внутри формы h: будут обрабатываться на сервере на этапе обновления модели.
Надеюсь это поможет.