开发者社区> 问答> 正文

关于jfinal类型转换的问题?报错

@JFinal 你好,想跟你请教个问题:在使用jfinal的过程发现了几个使用不顺的地方,可能是自己使用过程中有点问题吧。

就是直接用jfinal的类型,用getInt获取页面中的数据,在页面上有name值为xxid的属性,后台获取时用

int id = r.getInt("xxid");获得.结果都是报错,说是字符串不能转换成int类型,还必须用

int id = Integer.parseInt(r.getInt("xxid").toString);来转换。还有类似的情况。通过页面上获取都是字符串形式的吧。看到源码中时这样定义的:

(Integer)columns.get(column); 直接用Integer转是否有些牵强呢? 新手,望指导。谢谢


展开
收起
爱吃鱼的程序员 2020-06-22 14:53:16 432 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    有时候,强类型在web领域反而会带来麻烦,自己写个类型柔化的类。给你个参考

    /***类型柔化*主要用于基本类型间的转换操作,具有操作方便、容错性高、侵入性小的优点。*/publicclassZObjectimplementsSerializable{privatestaticfinallongserialVersionUID=1L;/***源对象*/privateObjectobj=null;/***类型柔化,源对象为null*/publicZObject(){}/***类型柔化*@paramobj源对象*/publicZObject(Objectobj){this.obj=obj;}/***强制转换源对象类型*本方法提供仅为统一格式,并无特别之处*@param<T>对象类型*@return*/@SuppressWarnings("unchecked")public<T>TtoObject(){return(T)this.obj;}/***获取源对象*@return*/publicObjectgetObject(){returnthis.obj;}/***静态转换*@paramobj源对象*@return*/publicstaticZObjectconv(Objectobj){returnnewZObject(obj);}/***布尔型*/publicstaticfinalbooleanTO_TYPE_BOOLEAN=Boolean.FALSE;/***字符串*/publicstaticfinalClass<String>TO_TYPE_STRING=String.class;/***短整数*/publicstaticfinalClass<Short>TO_TYPE_SHORT=Short.class;/***整型*/publicstaticfinalClass<Integer>TO_TYPE_INT=Integer.class;/***长整*/publicstaticfinalClass<Long>TO_TYPE_LONG=Long.class;/***浮点*/publicstaticfinalClass<Float>TO_TYPE_FLOAT=Float.class;/***双精度*/publicstaticfinalClass<Double>TO_TYPE_DOUBLE=Double.class;/***转换为其他类型。<br/>*注意:如目标类型不可在以下类型中则进行强制转换,强制转换失败返回{@codenull}*@see#TO_TYPE_BOOLEAN*@see#TO_TYPE_STRING*@see#TO_TYPE_SHORT*@see#TO_TYPE_INT*@see#TO_TYPE_LONG*@see#TO_TYPE_FLOAT*@see#TO_TYPE_DOUBLE*@param<T>目标类型*@paramclazz目标类型*@return*/@SuppressWarnings("unchecked")public<T>TtoType(Class<T>clazz){/****/if(String.class.isAssignableFrom(clazz)){return(T)toString();}/****/if(Boolean.class.isAssignableFrom(clazz)||boolean.class.isAssignableFrom(clazz)){return(T)toBoolean();}/****/if(Short.class.isAssignableFrom(clazz)||short.class.isAssignableFrom(clazz)){return(T)toShort();}/****/if(Integer.class.isAssignableFrom(clazz)||int.class.isAssignableFrom(clazz)){return(T)toInteger();}/****/if(Long.class.isAssignableFrom(clazz)||long.class.isAssignableFrom(clazz)){return(T)toLong();}/****/if(Float.class.isAssignableFrom(clazz)||float.class.isAssignableFrom(clazz)){return(T)toFloat();}/****/if(Double.class.isAssignableFrom(clazz)||double.class.isAssignableFrom(clazz)){return(T)toDouble();}/***强制转换,失败则返回null*/try{returnclazz==null?null:clazz.cast(obj);}catch(ClassCastExceptionex){returnnull;}}/***转换为字符串*@return源对象为null时返回<b>空字符串("")</b>,而<b>不是</b>null*/@OverridepublicStringtoString(){String_str=null;do{if(obj==null){break;}if(objinstanceofString){_str=obj.toString();break;}_str=obj.toString();}while(false);return_str==null?"":_str;}/***转换为字符*@return默认返回0*/publicchartoChar(){char_char=Character.UNASSIGNED;String_str=this.toString();if(_str!=null&&_str.length()>0){_char=_str.charAt(0);}return_char;}/***转换为字节*@return默认返回0*/publicbytetoByte(){byte_byte=0;String_str=this.toString();if(_str!=null&&_str.getBytes().length>0){_byte=_str.getBytes()[0];}return_byte;}/***转换为短整型*@return默认返回0*/publicShorttoShort(){short_short=0;int_int=toInteger();if(_int<=Short.MAX_VALUE&&_int>=Short.MIN_VALUE){_short=(short)_int;}return_short;}/***验证十六进制字母*@paramch*@return*/privatebooleanisHex(charch){if((ch>='a'&&ch<='f')||ch>='A'&&ch<='F'){returntrue;}returnfalse;}privatestaticfinalintNUM_TYPE_INT=0;//privatestaticfinalintNUM_TYPE_LONG=1;//privatestaticfinalintNUM_TYPE_FLOAT=2;//privatestaticfinalintNUM_TYPE_DOUBLE=3;///***分析数字*@paramnumStr数字字符串*@paramisDot是否有小数点*@paramisE是否使用科学计数法*@return*/privateNumberparseNum(intnumtype){if(obj==null){return0;}if(objinstanceofBoolean){return(Boolean.TRUE.equals(obj))?1:0;}StringnumStr=StringHelper.ltrim(toString());intlen=numStr.length();if(len==0){return0;}booleanisDot=(numtype==NUM_TYPE_FLOAT||numtype==NUM_TYPE_DOUBLE);booleanisE=numtype==NUM_TYPE_DOUBLE;inteIndex=-1;//e位置(是否使用科学计数法)intstart=-1;//数字起始位置(用于判别小数点位置是否合法)intdotPos=-1;//小数点位置charch=0;chartmpCh=0;StringBuildernumBuilder=newStringBuilder();booleanisHex=false;inti=0;/***int,long,float,doublehex*float,doubledot*doublescientificnotation*/if(numStr.charAt(0)=='+'){i++;}if(numStr.charAt(0)=='-'){i++;numBuilder.append('-');}if(len>=i+2){tmpCh=numStr.charAt(i+1);if(numStr.charAt(i)=='0'//&&(tmpCh=='x'||tmpCh=='X')){isHex=true;i+=2;}}start=i;for(;i<len;i++){ch=numStr.charAt(i);if(isE){if(i!=0&&(ch=='e'||ch=='E')&&!isHex&&eIndex<0){numBuilder.append(ch);eIndex=i;continue;}if(eIndex==i-1&&eIndex>-1){if(ch=='-'||ch=='+'){numBuilder.append(ch);continue;}}}if(Character.isDigit(ch)){numBuilder.append(ch);continue;}if(isHex){if(isHex(ch)){numBuilder.append(ch);continue;}}elseif(isDot){if(ch=='.'){//1.2if(dotPos<0&&start!=i){numBuilder.append(ch);dotPos=i;continue;}else{//.12,1.2.3break;}}}break;}intnumLen=numBuilder.length();if(numLen==0){return0;}tmpCh=numBuilder.charAt(0);if(numLen==1&&(tmpCh=='+'//||tmpCh=='-')){return0;}Numbernum=null;if(isHex){switch(numtype){caseNUM_TYPE_INT:num=Integer.parseInt(numBuilder.toString(),16);break;caseNUM_TYPE_LONG:caseNUM_TYPE_FLOAT:caseNUM_TYPE_DOUBLE:num=Long.parseLong(numBuilder.toString(),16);break;}}else{switch(numtype){caseNUM_TYPE_INT:num=Integer.parseInt(numBuilder.toString());break;caseNUM_TYPE_LONG:num=Long.parseLong(numBuilder.toString());break;caseNUM_TYPE_FLOAT:num=Float.parseFloat(numBuilder.toString());break;caseNUM_TYPE_DOUBLE:num=Double.parseDouble(numBuilder.toString());break;}}returnnum==null?0:num;}/***转换为整型*@return默认返回0*/publicIntegertoInteger(){int_int=0;try{_int=parseNum(NUM_TYPE_INT).intValue();}catch(NumberFormatExceptionnfex){/***超过上限改为0*_integer=Integer.MAX_VALUE;*/_int=0;}return_int;}/***转换为布尔型,非0数字,不为空的字符串返回true*@return默认返回false*/publicBooleantoBoolean(){boolean_boolean=false;do{if(obj==null){break;}/***bug:booleanstringwillbetriggerstackerror!*fixed!*/if(objinstanceofBoolean){_boolean=Boolean.TRUE.equals(obj);break;}StringboolString=newZObject(obj).toString();IntegerboolInteger=newZObject(obj).toInteger();if(boolInteger!=0){_boolean=true;break;}if("0".equals(boolString)||"false".equalsIgnoreCase(boolString)){break;}if(boolString.length()>0){_boolean=true;break;}}while(false);return_boolean;}/***转换为整数后再转换为字符串*@return默认返回"0"*/publicStringtoIntString(){returnString.valueOf(toInteger());}/***转换为长整型*@return默认返回0*/publicLongtoLong(){long_long=0L;try{_long=parseNum(NUM_TYPE_LONG).longValue();}catch(NumberFormatExceptionnfex){/***超过上限改为0*_long=Long.MAX_VALUE;*/_long=0L;//超过上限改为0L}return_long;}/***转换为浮点型*@return默认返回0F*/publicFloattoFloat(){float_float=0F;try{_float=parseNum(NUM_TYPE_FLOAT).floatValue();if(Float.isInfinite(_float)||Float.isNaN(_float)){return0F;}}catch(NumberFormatExceptionnfex){/***超过上限改为0*_double=Integer.MAX_VALUE;*/_float=0F;}return_float;}/***转换为双精度*@return默认返回0D*/publicDoubletoDouble(){double_double=0D;try{_double=parseNum(NUM_TYPE_DOUBLE).doubleValue();if(Double.isInfinite(_double)||Double.isNaN(_double)){return0D;}}catch(NumberFormatExceptionnfex){/***超过上限改为0*_double=Integer.MAX_VALUE;*/_double=0D;}return_double;}}

    这种玩法很有新意啊r是什么?

    引用来自“谭明智”的答案

    r是什么?这个和数据库设计的时候有关系,,那个id是long型或者string型,,就不能使用getInt()方法

    引用来自“RobertCool”的答案

    这个和数据库设计的时候有关系,,那个id是long型或者string型,,就不能使用getInt()方法

    引用来自“圣杰是也”的答案

    引用来自“谭明智”的答案

    r是什么?

    引用来自“谭明智”的答案

    引用来自“圣杰是也”的答案

    引用来自“谭明智”的答案

    r是什么?

    引用来自“圣杰是也”的答案

    引用来自“谭明智”的答案

    引用来自“圣杰是也”的答案

    引用来自“谭明智”的答案

    r是什么?
    2020-06-22 14:53:34
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
杜万-Java reactive programming - Reactor 3 and Spring WebFlux 立即下载
Java基础入门(四)-泛型、反射、注解 立即下载
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载