10.04.2013

OAF: Реализация механизма связывания страниц train

Последовательность действий для реализации train


1. Создаем регион TrainRN, создаем ссылки на страницы - дочерние элементы (Item Style: link). Свойства бинов Destination URI и Text обязательны для заполнения:


2. Создаем регион FooterRN, в котором будут располагаться управляющие элементы для Train. В контроллере региона будет реализована передача параметров между страницами и логика переходов.

 
В свойствах First Step и Last Step нужно указать номера соответственно первой и последней страниц (в нашем примере их 2. First Step=1, Last Step=2). Кнопка Apply будет доступна только при сохранении резальтата, т.е. на странице 2 - это мы позже реализуем в контроллере FooterCO.

3. Создаем собственно сами страницы DeviationSearchPG и DeviationInputPG. Необходимо встроить регионы, созданные на предыдущих шагах в страницу:


Результат:


4. Реализуем контроллер FooterCO
public void processRequest(OAPageContext pageContext, OAWebBean webBean) {
   super.processRequest(pageContext, webBean);
   int step = 1;
   if (pageContext.getParameter("StepNumber") != null)
        step = Integer.parseInt(pageContext.getParameter("StepNumber"));
   OANavigationBarBean navigationBean = 
        (OANavigationBarBean)webBean.findChildRecursive("NavigationBar");
   // устранавливаем шаг
   navigationBean.setValue(step);
   OASubmitButtonBean applyButton = 
        (OASubmitButtonBean)webBean.findIndexedChildRecursive("Apply");
   // скрываем кнопку "Применить" на всех страницах, кроме последней
   if (step != 2){
        applyButton.setRendered(false);
   }
}
Для реализации логики переходов и передачи параметров удобно воспользоваться следующим алгоритмом в процедуре processFormRequest
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean){
super.processFormRequest(pageContext, webBean);
String targetPage = "";
OAApplicationModule am = pageContext.getApplicationModule(webBean);
if (GOTO_EVENT.equals(pageContext.getParameter(EVENT_PARAM)) && 
    "NavigationBar".equals(pageContext.getParameter(SOURCE_PARAM)) && 
    pageContext.getParameter("Apply") == null) {
    int target;
    target = Integer.parseInt(pageContext.getParameter(VALUE_PARAM));
    HashMap pageParams = new HashMap();
    try {
        switch (target) {
        case 1:
            targetPage = 
                    "/oracle/apps/xxtest/webui/DeviationSearchPG";
            pageParams.put("StepNumber", target);        
            break;
        case 2:
            targetPage = 
                    "/oracle/apps/xxrtest/webui/DeviationInputPG";
            pageParams.put("StepNumber", target);
            break;
        default:
            throw new OAException("Unexpected step number:" + target);
        } // Retain AM
        pageContext.setForwardURL("OA.jsp?page=" + targetPage, 
                                  null, 
                                  OAWebBeanConstants.KEEP_MENU_CONTEXT, 
                                  null, pageParams, true, 
                                  OAWebBeanConstants.ADD_BREAD_CRUMB_NO, 
                                  OAWebBeanConstants.IGNORE_MESSAGES);

    } catch (Exception e) {
        throw OAException.wrapperException(e);
    }
}
}

Комментариев нет :