为Backingbean创建基类
分类: JDeveloper+ADF 2010-09-30 08:46 36人阅读 评论(0) 收藏举报 在Oracle ADF中,经常会使用Backing Scope的ManagedBean,也就是通常所描述的Backingbean,而在这些Backingbean中,有一些操作在很多页面中会被反复重用,例如:
1)根据属性名称从当前页面的绑定中取值 2)向指定的当前页面绑定的属性中设值
3)查找AM中发布成为Client Interface的方法的OperationBinding 4)解析EL表达式 5)其他
既然有了重用,那么我们就可以创建Backingbean的基类,将这些可重用方法抽象到该类,在Oracle ADF的Best Practise中,恰好建议我们这样去做。 在HADF框架的设计与实现的过程时,我们就设计了这样的一个基类,所有基于HADF框架开发的Backingbean都继承于该类,其代码如下:
view plain
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150 1. /**
2. * @(#)CustomManagedBean.java 3. *
4. * HAND Enterprise Solution Company.
5. * All rights reserved 6. * 7. */
8. package hand.hadf.common.view.backing;
9. import hand.hadf.common.view.HadfException; 10.import javax.el.ELContext;
11.import javax.el.ExpressionFactory; 12.import javax.el.ValueExpression;
13.import javax.faces.application.Application; 14.import javax.faces.context.FacesContext;
15.import oracle.adf.model.binding.DCBindingContainer; 16.import oracle.adf.model.binding.DCIteratorBinding; 17.import oracle.binding.AttributeBinding; 18.import oracle.binding.BindingContainer; 19.import oracle.binding.ControlBinding; 20.import oracle.binding.OperationBinding; 21./**
22. * 所有基于HADF框架进行的应用开发的BackingBean的基类,即所有客户化开发创建的BackingBean均继承于该类, 23. * 同时要求所有子类实现Serializable接口 24. * @author Eleven.Xu Nov.26th, 2009 25. * @version 1.0.0.0 26. */
27.public class CustomManagedBean { 28. /**
29. * 默认的构造器 30. */
31. public CustomManagedBean() { 32. } 33. /**
34. * 解析EL表达式,并返回匹配对象或创建出相应对象 35. * @param expression 待解析的EL表达式 36. * @return 匹配的受管对象 37. */
38. public Object resolveExpression(String expression) { 39. FacesContext facesContext = getFacesContext(); 40. Application app = facesContext.getApplication();
41. ExpressionFactory elFactory = app.getExpressionFactory(); 42. ELContext elContext = facesContext.getELContext(); 43. ValueExpression valueExp =
44. elFactory.createValueExpression(elContext, expression, Object.class);
45. return valueExp.getValue(elContext); 46. } 47. /**
48. * 获取当前FacesContext对象 49. */
50. public FacesContext getFacesContext() { 51. return FacesContext.getCurrentInstance(); 52. } 53. /**
54. * 获取当前页面的BindingContainer对象
55. * @return 当前页面的BindingContainer对象 56. */
57. public BindingContainer getBindingContainer() {
58. return (BindingContainer)resolveExpression(\ 59. } 60. /**
61. * 获取当前页面对应的DCBindingContainer 62. * @return 当前页面对应的DCBindingContainer 63. */
64. public DCBindingContainer getDCBindingContainer() { 65. return (DCBindingContainer)getBindingContainer(); 66. } 67. /**
68. * 在当前的DCBindingContainer中获取OperationBinding 69. * @param name 待获取的OperationBinding名称 70. * @return OperationBinding对象 71. */
72. public OperationBinding findOperation(String name) { 73. OperationBinding operationBinding =
74. getDCBindingContainer().getOperationBinding(name); 75. if (operationBinding == null) {
76. throw new HadfException(\nd\77. }
78. return operationBinding; 79. } 80. /**
81. * 在当前BindingContainer中查找Iterator Binding 82. * @param iteratorName Iterator名称 83. * @return Iterator Binding 84. */
85. public DCIteratorBinding findIterator(String iteratorName) {
86. DCIteratorBinding iter =
87. getDCBindingContainer().findIteratorBinding(iteratorName);
88. if (iter == null) {
89. throw new HadfException(\not found\90. }
91. return iter; 92. } 93. /**
94. * 获取当前页面绑定文件中指定属性的绑定值 95. * @param attributeName 属性名称