2015-05-21 3 views
1

Мой диалог типа «okCancel» не вызывает никаких событий на сервере при нажатии кнопки ok.Диалог ADF Faces - dialogListener не запускается

Кнопка отмены работает нормально, просто скрывая всплывающее окно.

Я использую Oracle ADF Faces 12.1.3 и JBoss шов 2.3 для инъекций компонентов.

Вот всплывающее окно и диалог код:

<af:form id="mainForm"> 
     <af:panelStretchLayout id="psl1"> 
      <!-- page layout --> 
     </af:panelStretchLayout> 
     <af:popup id="myPopup" 
      binding="#{bkBean.myPopup}" 
      contentDelivery="lazyUncached"> 
      <af:dialog id="myDialog" closeIconVisible="true" 
      modal="true" okVisible="true" cancelVisible="true" 
      title="Import from server to #{bkBean.file.name}" 
      type="okCancel" 
      dialogListener="#{bkBean.doSomething}"> 
      <af:panelFormLayout id="pfl1"> 
       <!-- Several input text here --> 
      </af:panelFormLayout> 
      </af:dialog> 
     </af:popup> 
    </af:form> 

Вот код для dialogListener. Я поставил точку отладки в заявлении, если:

import org.jboss.seam.annotations.Name; 
import org.jboss.seam.annotations.Scope; 

@Name("exportImportServer") 
@Scope(ScopeType.SESSION) 
public class ExportImportServerBean implements Cleanable { 
    public void importFromServer(DialogEvent event) { 
     if (event.getOutcome() == DialogEvent.Outcome.ok) { 
     } 
    } 
} 

exportImportServer поддержка боб в рамках сеанса.

Если я переключаю точку останова в первой строке кода внутри метода импорта импортируемого компонента exportImportServer, он не останавливается внутри. Этот метод не вызван. Кажется, что ничего не происходит (даже у меня нет ошибок), за исключением того, что отправляется основная форма.

В режиме отладки после нажатия кнопки ok я могу остановиться внутри метода PhaseListener beforePhase(PhaseEvent phaseEvent). Но я действительно не знаю, следует ли вызывать метод поддержки bean bean после метода PhaseListener beforePhase(PhaseEvent phaseEvent).

Я ищу какой-либо намек на то, как я могу его отладить?
Есть ли какой-либо javascript, который называется, когда кнопка «ОК» нажата на диалог?


UPDATE: кажется, что проблема возникает из-за того, что всплывающее окно вызывается из области страницы и определенной в другой странице (на главную страницу, содержащую область), как показано в коде ниже:

Внутри main.xthml:

<af:document> 
    <af:form id="mainForm"> 
    <af:panelStretchLayout id="psl1" topHeight="auto" bottomHeight="0"> 
     <f:facet name="center"> 
     <af:region id="myRegion" showHeader="never" 
        value="#{main.regionModel}" /> 
     </f:facet> 
    </af:panelStretchLayout> 
    </af:form> 
    <af:popup id="myPopup" 
    binding="#{bkBean.myPopup}" 
    contentDelivery="lazyUncached"> 
    <af:dialog id="myDialog" closeIconVisible="true" 
     modal="true" okVisible="true" cancelVisible="true" 
     title="Import from server to #{bkBean.file.name}" 
     type="okCancel" 
     dialogListener="#{bkBean.doSomething}"> 
     <af:panelFormLayout id="pfl1"> 
     <!-- Several input text here --> 
     </af:panelFormLayout> 
    </af:dialog> 
    </af:popup> 
</af:document> 

Внутри myRegion.xhtml:

<?xml version='1.0' encoding='UTF-8'?> 
    <ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:trh="http://myfaces.apache.org/trinidad/html" 
       xmlns:tr="http://myfaces.apache.org/trinidad" 
       xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> 
     <af:tree ...> 
     </af:tree> 
     <!-- Contextual Menu --> 
     <af:popup id="pp1" contentDelivery="lazyUncached"> 
     <af:menu> 
      <af:commandMenuItem text="Do something" immediate="true" 
rendered="#{bkBean2.isRendered}" icon="icon.png" actionListener="#{bkBean2.showMyPopup}" /> 
     </af:menu> 
     </af:popup> 
    </ui:composition> 

Это работает, если я определяю всплывающее окно внутри myRegion.xhtml, но не, если я определяю всплывающее окно внутри main.xhtml.

Благодарим вас за любые подсказки о том, как заставить его работать с всплывающим окном, определенным внутри main.xhtml?

+0

Это ударил ваш метод при нажатии на отмену? – User404

+0

Нет, нет. – jerome

+0

Не следует ли использовать диалоговое окно «dialogListener =» # {ExportImportServerBean.importFromServer} ">' Может быть, это ошибка заклинания. Вы можете проверить, правильно ли вызывается метод, если вы нажмете «ctrl» и щелкните имя метода на странице jsff. Включает ли навигацию вас в метод? написано в вашем фасоли? –

ответ

0

У вас есть два варианта:

  1. Try отображение вашего боб в вашем ADFC-config.xml вместо использования аннотаций.

  2. Оставьте аннотаций на месте и убедитесь, что вы используете включения CDI в приложении АПД, как показано ниже:

http://www.jobinesh.com/2014/08/enabling-cdi-in-adf-applications.html

Стоит отметить, что КДИ (аннотаций на основе бобов) не используется очень часто с ADF - по крайней мере, мало информации о людях, которые придерживаются подхода CDI, поэтому вы можете идти по неизведанной территории.

+0

Нет третьего варианта :)? Я не использую CDI, я использую jboss-шов 2.3 для инъекций. Извините, я не уточнил в своем коде. До сих пор мои бобы работают хорошо. Кроме этого dialogListener. Но, может быть, проблема может возникнуть из какого-либо фильтра сервлетов или какого-либо сопоставления в моем web.xml, не перенаправляя мой метод бэканга. Точно такой же код работал с Oracle ADF Faces 11. – jerome

+0

Ничего себе, теперь это коктейль, который я никогда бы не подумал: Jboss Seam и ADF - две из моих любимых фреймворков - собраны в одну тарелку :) –

Смежные вопросы