WSRP портлети в Oracle WebCenter: трансформиране на потоците от задачи (ADF) в портлети

Правя известно проучване на портлетите, предлагани от WebCenter, но имам някои проблеми, свързани с прехвърлянето на параметри между тях. Идеята ми беше да създам 2 портлета: портлет на отдел, където мога да избера идентификатор на отдел, който се изпраща като параметър на втория портлет, служители, така че ще имам таблица със съответните служители от посочения отдел. Тези 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 да се изпълнява всеки път, когато се появи събитие. Всичко това, смесено с departments.jsff, работи в .jspx страница, ако създам съпоставянето на събития

Сега се опитвам да трансформирам този поток от задачи в портлет. След като създам запис на портлет за потока на страницата, трябва да създам навигационен параметър и правя това във zaposlenih.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, когато избера отдел, departmentId се прехвърля към портлета за служители, 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