Oracle ADF имеет определенный набор классов, которые помогают в разработке приложений. Сегодня я хочу рассказать, что это за классы и их возможности.
BindingContext, BindingContainer DCBindingContainer
BindingContext, BindingContainer and DCBindingContainer классы. Эти классы необходимы, что получать данные из ADF pagedef объектов.
| //получение BindingContext,BindingContainer и DCBindingContainer BindingContext bc = BindingContext.getCurrent();
BindingContainer bcon = bc.getCurrentBindingsEntry();
DCBindingContainer dcbcon = (DCBindingContainer) bc.getCurrentBindingsEntry();
List<AttributeBinding> attr = bcon.getAttributeBindings();
List<OperationBinding> oper = bcon.getOperationBindings();
List<ControlBinding> ctrl = bcon.getControlBindings();
List<AttributeBinding> attrDcbcon = dcbcon.getAttributeBindings();
List<OperationBinding> operDcbcon = dcbcon.getOperationBindings();
List iterDcbcon = dcbcon.getIterBindingList();
List exec = dcbcon.getExecutableBindings();
List<ControlBinding> ctrlDcbcon = dcbcon.getControlBindings();
|
|
//получение метода,установка значений его параметров и выполнение
OperationBinding method = dcbcon .getOperationBinding("methodAction");
Map paramsMap = method.getParamsMap();
paramsMap.put("param","value") ; method.execute();
List errors = method.getErrors(); |
|
//получение аттрибута и установка нового значения
AttributeBinding attr = (AttributeBinding)dcbcon.getControlBinding("test");
attr.setInputValue("test");
//получение данных из ADF tree и table |
| FacesCtrlHierBinding treeData = (FacesCtrlHierBinding)dcbcon.getControlBinding("tree");
Row[] rows = treeData.getAllRowsInRange();
//получение данных из итератора
DCIteratorBinding iterBind= (DCIteratorBinding)dcbcon.get("Iterator");
String attribute = (String)iterBind.getCurrentRow().getAttribute("field");
// обновление итератора
iterBind.executeQuery();
iterBind.refresh(DCIteratorBinding.RANGESIZE_UNLIMITED); |
Faces Context
FacesContext класс используется для поиска JSF компонентов, изменения локалей, получения ELContext, ExternalContext а так же для получения bean-а
| // FacesContext
FacesContext facesCtx = FacesContext.getCurrentInstance();
// поиск UIComponent по id
UIComponent input = facesCtx.getViewRoot().findComponent("f1");
// смена локали
facesCtx.getViewRoot().setLocale( Locale.ENGLISH);
// создание и выполнение el выражения
Application app = facesCtx.getApplication();
ExpressionFactory expFactory = app.getExpressionFactory();
ELContext elContext = facesCtx.getELContext();
ValueExpression valueExp = expFactory.createValueExpression(elContext, "#{xxxx}", Object.class);
Object result = valueExp.getValue(elContext);
// вывод сообщения в окне
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "header", "Текст сообщения");
facesCtx.addMessage(input.getClientId(facesCtx), msg);
// получение ExternalContext
ExternalContext ectx = facesCtx.getExternalContext();
// Получение session bean, где SessionBean название бина, а Session - название класса
ValueExpression ve = expFactory.createValueExpression(ctx.getELContext(), "#{SessionBean}", Session.class);
Session test = (Session)ve.getValue(facesCtx .getELContext());
|
External Context
The ExternalContext класс, получает все java init и context параметры (web.xml) , Request и Session параметры и web application url.
| // ExternalContext
ExternalContext ectx = facesCtx.getExternalContext();
// получение параметров
Map<String, Object> initParamsVar = ectx.getInitParameterMap();
Map<String, String> requestParamsVar = ectx.getRequestParameterMap();
Map<String, Object> sessionParamsVar = ectx.getSessionMap();
// context root приложения
String contextPath = ectx.getRequestContextPath();
// перенапраление на страницу
HttpServletResponse response = (HttpServletResponse)ectx.getResponse();
String url = ectx.getRequestContextPath()+"/adfAuthentication?logout=true&end_url=/faces/<название необходимой страницы>.jspx";
try {
response.sendRedirect(url);
} catch (Exception ex) {
ex.printStackTrace();
} |
Adf Faces Context
При помощи AdfFacesContext класса, вы можете частично обновлять страницу.Это называется Partial Page Rendering ( PPR), а так же работать с PageFlowScope и ViewScope переменными
| // AdfFacesContext |
| AdfFacesContext adfFacesCtx = AdfFacesContext.getCurrentInstance();
// PPR
adfFacesCtx.addPartialTarget(input);
// получение PageFlowScope параметро
Map<String, Object> scopePageFlowScopeVar= adfFacesCtx.getPageFlowScope();
// получение viewScope параметров
Map<String, Object> scopeViewScopeVar= adfFacesCtx.getViewScope(); |
При помощи AdfFacesContext все скоупы памяти, а так же ELContext и SecurityContext.
| // ADFContext |
| ADFContext adfCtx = ADFContext.getCurrent();
// получение скоупов
Map<String, Object> applicationScope = adfCtx.getApplicationScope();
Map<String, Object> pageFlowScope = adfCtx.getPageFlowScope();
Map<String, String> requestScope = adfCtx.getRequestScope();
Map<String, Object> sessionScope = adfCtx.getSessionScope();
// создание и выполнение el выражения
ELContext elContext = adfCtx.getELContext();
ExpressionFactory expFactory = adfCtx.getExpressionFactory();
ValueExpression valueExp = expFactory.createValueExpression(elContext2, "#{xxxx}",
Object.class);
Object result = valueExp.getValue(elContext); |
SecurityContext
SecurityContext классс, возвращает данные по текущему пользователю и его ролям
| |
| SecurityContext secCntx = adfCtx.getSecurityContext();
String user = secCntx.getUserName();
String[] roles = secCntx.getUserRoles();
boolean isAuthenticated = secCntx.isAuthenticated()
|
Controller Context
ControllerContext класс используется для получения данных о контроллере и данных по исключениям. Он обеспечивает получение информации о контроллере веб приложения для каждого запроса
|
ControllerContext cc = ControllerContext.getInstance();
|
|
//получить текущий View Id
ControllerContext.getInstance().getCurrentViewPort().getViewId();
//получить текущий request URL во view activity
String url = cc.getGlobalViewActivityURL(viewId)
//или
String viewId = "/department";
String url = cc.getGlobalViewActivityURL(viewId);
// перейти програмно между view acitvities
ControllerContext.getInstance().getCurrentViewPort().setViewId("Department");
// получить исключения
|
|
Exception exp = cc.getCurrentViewPort().getExceptionData();
|
Так же можно найти достаточно большое количество кода, облегачающего разработку на github-е у ADF разработчика Marley(
www.oracle-adf.ru):
https://github.com/oracle-adf/Utils
Комментариев нет:
Отправить комментарий