This Is A FineDay

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            93 隨筆 :: 0 文章 :: 69 評論 :: 0 Trackbacks

          JavaBean中Property命名不規范出現了問題:
          public class StockGuessInfo {

          ?private String SN;

          ?private String A_NUM;
          ?public String getA_NUM() {
          ??return A_NUM;
          ?}

          ?public void setA_NUM(String a_num) {
          ??A_NUM = a_num;
          ?}


          這段代碼用Apache的Common中的Util反射就得不到預期的結果
          <bean:write name="stockGuessActionForm" property="A_NUM" />?? 出現錯誤
          <bean:write name="stockGuessActionForm" property="a_NUM" />?? 可以得到結果

          //Apache的Common中的Util要求javaBean中Property變量要求兩個字母要大寫都大寫,小寫都小寫,否則反射失敗
          NAME???成功
          Name???失敗
          NaME???失敗




          ==============

          ??? public static BeanInfo getBeanInfo(Class<?> beanClass)
          ?throws IntrospectionException
          ??? {
          ?if (!ReflectUtil.isPackageAccessible(beanClass)) {
          ???? return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
          ?}
          ...................
          ??? }??
          ??? private BeanInfo getBeanInfo() throws IntrospectionException {
          ?..........

          ?PropertyDescriptor pds[] = getTargetPropertyInfo();

          ?.........?
          ??? }

          ?private PropertyDescriptor[] getTargetPropertyInfo() {
          ?..........
          ?if{
          ?............
          ?}else {

          ???? // Apply some reflection to the current class.

          ???? // First get an array of all the public methods at this level
          ???? Method methodList[] = getPublicDeclaredMethods(beanClass);

          ???? // Now analyze each method.
          ???? for (int i = 0; i < methodList.length; i++) {
          ???????? Method method = methodList[i];
          ??if (method == null) {
          ????? continue;
          ??}
          ???????? // skip static methods.
          ??int mods = method.getModifiers();
          ??if (Modifier.isStatic(mods)) {
          ????? continue;
          ??}
          ???????? String name = method.getName();
          ???????? Class argTypes[] = method.getParameterTypes();
          ???????? Class resultType = method.getReturnType();
          ??int argCount = argTypes.length;
          ??PropertyDescriptor pd = null;

          ??if (name.length() <= 3 && !name.startsWith(IS_PREFIX)) {
          ????? // Optimization. Don't bother with invalid propertyNames.
          ????? continue;
          ??}

          ??try {

          ???????????? if (argCount == 0) {
          ????????? if (name.startsWith(GET_PREFIX)) {
          ????????????? // Simple getter
          ============================文問題就出現在這里 decapitalize(name.substring(3)=========

          ????pd = new PropertyDescriptor(decapitalize(name.substring(3)),
          ??????method, null);??????
          ???????????????? } else if (resultType == boolean.class && name.startsWith(IS_PREFIX)) {
          ????????????? // Boolean getter
          ???????????????????? pd = new PropertyDescriptor(decapitalize(name.substring(2)),
          ??????method, null);
          ????????? }
          ............................................
          ???}

          ?? }

          ?public static String decapitalize(String name) {
          ?if (name == null || name.length() == 0) {
          ???? return name;
          ?}
          ?if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
          ???Character.isUpperCase(name.charAt(0))){
          ???? return name;
          ?}
          ?char chars[] = name.toCharArray();
          ?chars[0] = Character.toLowerCase(chars[0]);
          ?return new String(chars);
          ??? }
          //?pd = new PropertyDescriptor(decapitalize(name.substring(3)),
          //就是在這里了decapitalize(name)中要求Property變量要求兩個字母要大寫都大寫,小寫都小寫,否則反射失敗
          ,否則反射失敗

          posted on 2007-03-16 16:20 Peter Pan 閱讀(738) 評論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 石首市| 乐山市| 贡嘎县| 吴旗县| 凤山县| 古交市| 富源县| 金门县| 思茅市| 进贤县| 南木林县| 威远县| 临洮县| 镇远县| 体育| 广平县| 仙居县| 邵阳县| 临高县| 南陵县| 涿鹿县| 旺苍县| 平凉市| 双桥区| 东明县| 九龙城区| 古交市| 奉节县| 东城区| 广德县| 赤峰市| 扶绥县| 门源| 文登市| 沁水县| 玉山县| 中山市| 资阳市| 炎陵县| 会泽县| 都匀市|