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
          主站蜘蛛池模板: 龙门县| 朝阳市| 嘉禾县| 信阳市| 郑州市| 疏附县| 张掖市| 郧西县| 涪陵区| 额济纳旗| 莲花县| 荥经县| 盐池县| 阜新市| 南昌市| 会泽县| 西平县| 饶平县| 长沙县| 开化县| 榆中县| 冷水江市| 通许县| 金寨县| 仪征市| 平南县| 克山县| 沧州市| 江津市| 宁蒗| 青神县| 太仆寺旗| 汨罗市| 定州市| 抚远县| 博乐市| 大田县| 盱眙县| 嵩明县| 柳州市| 白玉县|