Портлеты WSRP в Oracle WebCenter: преобразование потоков задач (ADF) в портлетах

Я изучаю портлеты, предлагаемые WebCenter, но у меня есть некоторые проблемы, связанные с передачей параметров между ними. Моя идея состояла в том, чтобы создать 2 портлета: портлет отдела, в котором я могу выбрать DepartmentId, который отправляется в качестве параметра второму портлету, «сотрудники», поэтому у меня будет таблица с соответствующими сотрудниками из указанного отдела. Эти 2 портлета построены на основе некоторых потоков страниц. Портлет отдела работает нормально, но с портлетом сотрудников у меня проблемы.

Фрагмент страницы JSP, соответствующий сотрудникам, имеет таблицу на основе ViewObject, за которым стоит запрос на основе переменной связывания. Я создал EmployeesBean, где у меня есть метод, который принимает полученный параметр и выполняет запрос с этой переменной привязки. Вот код:

import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;

import javax.faces.application.Application;
import javax.faces.context.FacesContext;

import oracle.adf.view.rich.context.AdfFacesContext;

import oracle.jbo.ApplicationModule;
import oracle.jbo.Row;
import oracle.jbo.ViewObject;

public class EmployeesBean {
    private static final String DEPARTMENT_NUMBER_KEY = "DEPTNO";
    private static final int DEPARTMENT_NUMBER_NULL_VALUE = -1;   

    public EmployeesBean() {
        super();
    }

    public void getEmployees(String deptno) {
        System.out.println("enters in getEmployees()");
        int filterDeptno = findDepartmentValue(deptno);
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application app = facesContext.getApplication();
        ExpressionFactory elFactory = app.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        ValueExpression valueExp =
            elFactory.createValueExpression(elContext, "#{data.AppModuleDataControl.dataProvider}",
                                        Object.class);
        ApplicationModule am = (ApplicationModule)valueExp.getValue(elContext);
        ViewObject emplVO;
        emplVO = am.findViewObject("EmployeesVO1");       
        emplVO.setNamedWhereClauseParam("deptno", filterDeptno);
        emplVO.executeQuery();
        Row r = emplVO.first();
        System.out.println(r.getAttribute("FirstName"));
    }

    public void setDepartmentNumber(String deptno) {
        selectDepartment(deptno);       
    }

    public void selectDepartment(String deptno) {
        System.out.println("aici e problema");
        AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();
        System.out.println(deptno);        
        afContext.getPageFlowScope().put(DEPARTMENT_NUMBER_KEY, deptno);
    }

    public int findDepartmentValue(String defaultValue) {
        AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();
        String deptno =
            (defaultValue == null ? (String)afContext.getPageFlowScope().get(DEPARTMENT_NUMBER_KEY) :
         defaultValue);
        return (deptno == null ? DEPARTMENT_NUMBER_NULL_VALUE :
            Integer.valueOf(deptno));
    }
}

Я также перетащил на employee.jsff метод getEmployees (), поэтому, если я перейду к определению страницы, у меня будет привязка, которая определит, что метод getEmployees будет выполняться каждый раз, когда появляется событие. Все это в сочетании с департаментами. Jsff работает на странице .jspx, если я создаю сопоставление событий.

Теперь я пытаюсь преобразовать этот поток задач в портлет. После создания записи портлета для потока страниц мне нужно создать параметр навигации, и я делаю это в файле employee.xml:

<input-parameter-definition>
    <description>Main context parameter</description>
    <display-name>Department Number</display-name>
    <name>deptno</name>
    <value>#{pageFlowScope.contextProvider.departmentNumber}</value>
    <class>java.lang.String</class>
</input-parameter-definition>
<managed-bean>
    <managed-bean-name>contextProvider</managed-bean-name>
    <managed-bean-class>view.EmployeesBean</managed-bean-class>
    <managed-bean-scope>pageFlow</managed-bean-scope>
</managed-bean>

Все работает нормально, но когда я пытаюсь использовать это как портлет в приложении WebCenter, когда я выбираю отдел, идентификатор подразделения передается портлету сотрудников, вызывается selectDepartment, но никогда не вызывается getEmployees () (событие не распространяется), поэтому данные в моей таблице не возвращаются. Я новичок в портлетах и ​​не понимаю, в чем проблема. Кто-нибудь может дать мне несколько идей?


person Georgiana    schedule 26.04.2010    source источник
comment
Я считаю, что это видео может дать вам хорошее начало youtube.com/watch?v=NI2Zy6gRfF4   -  person Amr Gawish    schedule 26.02.2012


Ответы (1)


когда вы используете портлет сотрудника, он создает параметр страницы в странице def. Вам нужно будет передать данные в этот параметр

person Peddi    schedule 09.03.2013