WebCenterが提供するポートレットについて調査していますが、それらの間でパラメーターを転送することに関連する問題がいくつかあります。私のアイデアは、2つのポートレットを作成することでした。2番目のポートレットemployeesにパラメーターとして送信される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));
}
}
また、employees.jsffにgetEmployees()メソッドをドラッグしたので、ページ定義に移動すると、イベントが表示されるたびに実行されるgetEmployeesメソッドを決定するバインディングがあります。イベントマッピングを作成すると、departments.jsffと混合されたこれらすべてが.jspxページで機能します
現在、このタスクフローをポートレットに変換しようとしています。ページフローのポートレットエントリを作成した後、ナビゲーションパラメータを作成する必要があり、これをemployees.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がemployeesポートレットに転送される部門を選択すると、selectDepartmentが呼び出されますが、getEmployees()は呼び出されません(イベント伝播されない)、したがって、データは私のテーブルに返されません。私はポートレットの初心者ですが、何が問題なのかわかりません。誰かが私にいくつかのアイデアを与えることができますか?