Backingbean创建基类 下载本文

内容发布更新时间 : 2024/5/11 13:01:34星期一 下面是文章的全部内容请认真阅读。

为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 属性名称