java中属性命名get字母大小写问题
java文件
company.java
private int sTime;
public void setSTime (int sTime) {
this.sTime = sTime;
}
public int getSTime() {
return sTime;
}
jsp文件
list.jsp
${company.sTime}
报错
Property 'sTime' not found on type com.entity.Company
1、背景
本文讲的普通JavaBean只是一个拥有Property(域/类变量)及其setter/getter的普通Java类。
有一定Java开发经验的人可能会知道,普通JavaBean的Property(域/类变量)的命名不能采用以下形式:aA***或者Aa***,如:"aDdress"或"Address",否则,在web应用中会报无法找到这个Property(因为根据"规则",需要找的是"ADdress"或"address")。但对于其中的原因,一般人都不明白,难道这是Sun公司当初定的规范吗?
Java开源以后,我们终于可以解开其中的谜:
2、普通JavaBean处理涉及到相关类
在web应用中,Servlet容器或者EJB容器一般会使用java.beans包中的类来加载这些JavaBean。
BeanInfo(接口)
|
SimpleInfo(类)
|
GenericBeanInfo(类)
GenericBeanInfo是JavaBean数据装载类。
Introspector是JavaBean处理中最重要的一个处理类。
另外的一些辅助类,就不一一列举了。
3、解密
3.1 开始
在应用中,我们通常会用以下代码来获取一个普通JavaBean相关的信息:
BeanInfo mBeanInfo = null;
try {
mBeanInfo = Introspector.getBeanInfo(Person.class);
} catch (IntrospectionException e) {
e.printStackTrace();
}
3.2 深入
在Introspector类的getBeanInfo方法中,我们发现其中与Property处理相关的行:
private GenericBeanInfo getBeanInfo()
throws IntrospectionException {
……
PropertyDescriptor apropertydescriptor[] = getTargetPropertyInfo();
……
}
3.3 继续深入
在Property处理方法中,我们发现其处理方式是根据getter/setter的方法来得到Property(域/类变量)
private PropertyDescriptor[] getTargetPropertyInfo() throws IntrospectionException{
……
if(s.startsWith("get")) obj = new PropertyDescriptor(decapitalize(s.substring(3)), method, null);
……
}
3.4 关键
接下来,最关键的就是下面这个方法:
public static String decapitalize(String s)
{
if(s == null || s.length() == 0)
//空处理
return s;
if(s.length() > 1 && Character.isUpperCase(s.charAt(1)) && Character.isUpperCase(s.charAt(0))){
//长度大于1,并且前两个字符大写时,返回原字符串
return s;
} else{
//其他情况下,把原字符串的首个字符小写处理后返回
char ac[] = s.toCharArray();
ac[0] = Character.toLowerCase(ac[0]);
return new String(ac);
}
}
java中属性命名get字母大小写问题的更多相关文章
- Java中的命名规范到底是怎样的
内容摘要:命名规范二,java中的方法名,对象名和字段名的第一个单词的首写字母应该小写,而后面的每个单词的首字母都应该小写 要想将java基础学的十分的牢固就必须将java中的命名规范掌握好了.俗话说 ...
- java中变量命名和引用变量的一个坑
这次有两个主题,第一个太简单啦,就是java中变量的命名规则,纯记忆性东西.第二个主题,就是讨论一下对象引用变量的一个注意点.
- java中pojo对象首字母大写导致无法赋值问题
命名规范(文末附有java命名规范)中指出,属性变量命名应采用驼峰命名的方式,即首字母小写,其他单词首字母大写: 但有时候我们对接三方的接口时,想要封装实体类来接受,但是发现接收到的参数的变量首字母是 ...
- MySQL中查询时对字母大小写的区分
我相信很多人在mysql中查询时都遇到过mysql不区分字母大小写的情况:如以下例子: 1.SELECT * FROM `user` WHERE userpass = 'Z20'; 结果为: 2.SE ...
- 浅谈Java中的命名规范
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...
- java中的命名规则
转载自:http://growstep.diandian.com/post/2011-08-17/3989094 1.类名首字母应该大写.属性(成员变量).方法.对象变量以及所有标识符(如形式参数.实 ...
- java中包命名常见规则
做java的都知道java的包.类.接口.枚举.方法.常量.变量等等模型都有一套约定的命名规则! 学习每一种语言都应该学习对应语法和命名规则,以保持一个良好的编码风格.一来显示自己的专业.二来方便阅读 ...
- ava包(package)的命名规范,java中package命名规则
Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统模块的 定义,比如生产对生产,物资对物资,基础类对基础类.以便看了包名就明白是哪个模块,从而直接到对应包里找相应的实现. 由于 ...
- java中属性,set get 以及如何学习类的一些用法
1,先来看一个例子 package com.tdq.java; public class Run { public static void main(String[]args){ Student st ...
随机推荐
- c语言和oc对比
1)源文件对比 思考&实现1: 1)在C语言中,我们遇到不同后缀的文件有哪些? .c .o .out .h 2.基本语法对比 1)数据类型对比学习 2)变量的定义对比 3)流程控制语句对比 1 ...
- 关于python语言使用redis时,连接是否需要关闭的问题
python操作完redis,需要关闭连接的吧,怎么关闭呢 1人赞 回复 君惜丶: redis-server会关闭空闲超时的连接redis.conf中可以设置超时时间:timeout 300 2017 ...
- Linux网络协议栈(二)——套接字缓存(socket buffer)
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1. 套接字缓存skb由两部分组成:(1) 报文数据:它 ...
- RDA 常用API
FAC: app_factory_data_new.h app_guiobj_cul_fm_factorySetting_new.c _APP_Update_Layer() //刷新节点 密码文件: ...
- UI:单例的写法
单例设计模式 参考 UIApplication sharedApplocation 详细解释 :参考 通讯录的helper 类的读取本地plist 文件的时候,使用的单例单例的要点有三个:一个类只能有 ...
- eclipse下清除项目的svn信息
点击项目右键->Team->Disconnect 选择第一个即可
- 51nod 1222 最小公倍数计数【莫比乌斯反演】
参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...
- 深入理解Android
http://blog.csdn.net/innost/article/details/47254381
- codeforces 570 E. Pig and Palindromes (DP)
题目链接: 570 E. Pig and Palindromes 题目描述: 有一个n*m的矩阵,每个小格子里面都有一个字母.Peppa the Pig想要从(1,1)到(n, m).因为Peppa ...
- 手把手教你玩微信小程序跳一跳
最近微信小程序火的半边天都红了,虽然不会写,但是至少也可以仿照网上大神开发外挂吧!下面手把手教妹纸们(汉纸们请自觉的眼观耳听)怎么愉快的在微信小游戏中获得高分. 废话不多说,咱们这就发车了!呸!咱们这 ...