当前位置: 代码迷 >> Web前端 >> 泛化兑现webwork的action
  详细解决方案

泛化兑现webwork的action

热度:185   发布时间:2012-10-24 14:15:58.0
泛化实现webwork的action

用泛化实现DAO大家就比较了解, 不知有没有人用泛化实现action呢, 代码如下:

java 代码
  1. ??
  2. import?java.io.Serializable; ??
  3. import?java.lang.reflect.ParameterizedType; ??
  4. ??
  5. import?org.apache.log4j.Logger; ??
  6. ??
  7. import?com.kelefa.common.dao.AbstractDAO; ??
  8. import?com.opensymphony.xwork.Action; ??
  9. import?com.opensymphony.xwork.ActionSupport; ??
  10. ??
  11. /**? ?
  12. ?*?@param?<dao></dao> ?
  13. ?*??????????该action实现添加功能的dao接口类,?例如:UserDAO ?
  14. ?*?@param?<vo></vo> ?
  15. ?*??????????要添加的实体类,?例如:User ?
  16. ?*?@param?<id></id> ?
  17. ?*??????????实体类的id属性的类,?一般是Integer ?
  18. ?*/??
  19. public abstract class AddBase&lt;DAO extends AbstractDAO&lt;VO, ID&gt;, VO, ID extends Serializable&gt;
  20. ????????extends?ActionSupport ??
  21. { ??
  22. ????private?static?final?Logger?log?=?Logger.getLogger(?AddBase.class?); ??
  23. ??
  24. ????private?static?final?long?serialVersionUID?=?1L; ??
  25. ??
  26. ????/** ?
  27. ?????*?该action实现添加功能的dao接口类,提供setter方法,使得ioc容器可以进行注射 ?
  28. ?????*/??
  29. ????protected?DAO?dao; ??
  30. ??
  31. ????public?void?setDao(?DAO?dao?) ??
  32. ????{ ??
  33. ????????this.dao?=?dao; ??
  34. ????} ??
  35. ??
  36. ????protected?VO?vo?=?newValueObject(); ??
  37. ??
  38. ????public?VO?getVo() ??
  39. ????{ ??
  40. ????????return?vo; ??
  41. ????} ??
  42. ??
  43. ????public?AddBase() ??
  44. ????{ ??
  45. ????} ??
  46. ??
  47. ?
  48. ????@SuppressWarnings(?"unchecked"?) ??
  49. ????protected?VO?newValueObject() ??
  50. ????{ ??
  51. ????????Class?entityClass?=?(Class)?((ParameterizedType)?getClass() ??
  52. ????????????????.getGenericSuperclass()).getActualTypeArguments()[1]; ??
  53. ??
  54. ????????if?(?log.isDebugEnabled()?) ??
  55. ????????????log.debug(?"entityClass:?"?+?entityClass.getCanonicalName()?); ??
  56. ??
  57. ????????VO?newInstance?=?null; ??
  58. ????????try??
  59. ????????{ ??
  60. ????????????newInstance?=?(VO)?entityClass.newInstance(); ??
  61. ????????} ??
  62. ????????catch?(?InstantiationException?ex?) ??
  63. ????????{ ??
  64. ????????????log.warn(?ex.getMessage(),?ex?); ??
  65. ????????} ??
  66. ????????catch?(?IllegalAccessException?ex?) ??
  67. ????????{ ??
  68. ????????????log.warn(?ex.getMessage(),?ex?); ??
  69. ????????} ??
  70. ??
  71. ????????return?newInstance; ??
  72. ????} ??
  73. ??
  74. ????/** ?
  75. ?????*?webwork?action ?
  76. ?????*/??
  77. ????@Override??
  78. ????public?String?execute() ??
  79. ????????????throws?Exception ??
  80. ????{ ??
  81. ????????dao.insert(?vo?); ??
  82. ??
  83. ????????return?Action.SUCCESS; ??
  84. ????} ??
  85. }??

?

这样派生类不用写一行代码即可实现添加功能, 例如:

java 代码
  1. ??
  2. import?com.kelefa.common.action.AddBase; ??
  3. import?com.kingonsoft.house.dao.cms.ADTypeDAO; ??
  4. import?com.kingonsoft.house.entity.cms.ADType; ??
  5. ??
  6. ??
  7. public?class?AddADType ??
  8. ????????extends?AddBase ??
  9. { ??
  10. ????private?static?final?long?serialVersionUID?=?1L; ??
  11. }??

?

不知大家对这种方法有何看法.

1 楼 downpour 2007-06-25  
老实说,没有一个企业应用的持久化的逻辑会如此简单,一句insert就ok了。

所以,除了Load,其他的范化的Action很难被用到。
  相关解决方案