This Is A FineDay

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            93 隨筆 :: 0 文章 :: 69 評(píng)論 :: 0 Trackbacks

          JavaBean中Property命名不規(guī)范出現(xiàn)了問題:
          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反射就得不到預(yù)期的結(jié)果
          <bean:write name="stockGuessActionForm" property="A_NUM" />?? 出現(xiàn)錯(cuò)誤
          <bean:write name="stockGuessActionForm" property="a_NUM" />?? 可以得到結(jié)果

          //Apache的Common中的Util要求javaBean中Property變量要求兩個(gè)字母要大寫都大寫,小寫都小寫,否則反射失敗
          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
          ============================文問題就出現(xiàn)在這里 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變量要求兩個(gè)字母要大寫都大寫,小寫都小寫,否則反射失敗
          ,否則反射失敗

          posted on 2007-03-16 16:20 Peter Pan 閱讀(738) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 临邑县| 奉新县| 晋城| 仁化县| 钦州市| 灵川县| 翁源县| 临汾市| 阳信县| 镇坪县| 高邮市| 贵南县| 寻甸| 卢湾区| 荥经县| 夏河县| 杭锦旗| 托里县| 原阳县| 叙永县| 都江堰市| 高雄县| 腾冲县| 嘉荫县| 绩溪县| 项城市| 呼玛县| 高雄县| 阜新| 白水县| 民丰县| 株洲市| 泗洪县| 康乐县| 仲巴县| 正安县| 牡丹江市| 临澧县| 沂水县| 尼木县| 翁源县|