当前位置:编程学习 > JAVA >>

struts2和javabean的set/get方法命名规范不一致吗?

如题,我的javaBean中当有cClientcode,cPassword这种属性字段时,用默认生成的set/get方法为:(驼峰命名法的set/get方法)

public class ClientList {
    private String cClientcode;
    private String cPassword;

public String getcClientcode() {
return cClientcode;
}
public void setcClientcode(String cClientcode) {
this.cClientcode = cClientcode;
}
public String getcPassword() {
return cPassword;
}
public void setcPassword(String cPassword) {
this.cPassword = cPassword;
}
}

当用struts2框架在action中注入该实体类后:
public class LoginAction extends BaseAction {

private ClientList clientlist;

public ClientList getClientlist() {
return clientlist;
}
public void setClientlist(ClientList clientlist) {
this.clientlist = clientlist;
}
//登录
public String login() throws Exception {

System.out.println(clientlist.getcClientcode());
System.out.println(clientlist.getcPassword());
return SUCCESS;
}
}

jsp页面的表单为
  

<input   name="clientlist.cClientcode" type="text" autocomplete="off" placeholder="会员卡号"  />


<input   name="clientlist.cPassword"  autocomplete="off" placeholder="会员卡密码"  type="password" />
 


问题出现了,当页面提交表单后,会出现Error setting expression 'clientlist.cClientcode' with value '[Ljava.lang.String;@13e7141'
Class ognl.OgnlRuntime can not access a member of class com.hg.entity.ClientList with modifiers "private"
这样子的错误,问题是处在属性值的set/get方法上,当把set/get方法改成
	public String getCClientcode() {
return cClientcode;
}
public void setCClientcode(String cClientcode) {
this.cClientcode = cClientcode;
}
public String getCPassword() {
return cPassword;
}
public void setCPassword(String cPassword) {
this.cPassword = cPassword;
}
这样子首字母也大写就不会报错误并且能取到页面传递的值,而这种方法是不符合javaBean的set/get命名规范的,难道struts2的这个命名规范就和javabean的规范不一样吗,还是有什么别的说法?
求大神指教一二 javaBean struts2 set()/get() --------------------编程问答-------------------- 那是自动生成的驼峰有问题。这里说下:
生成get/set方法时,会将你的变量名的第一个字符变成大写,这是规范!如
private String name;
生成get/set方法:
public String getName(){
xxx
}

public void setName(String name){
xxx

你的是:
private String cClientcode;
    private String cPassword;
所以生成的第一个C是要大写的。
} --------------------编程问答-------------------- 不管怎样生成的第一个是大写的了。 --------------------编程问答--------------------
引用 1 楼 huxiweng 的回复:
那是自动生成的驼峰有问题。这里说下:
生成get/set方法时,会将你的变量名的第一个字符变成大写,这是规范!如
private String name;
生成get/set方法:
public String getName(){
xxx
}

public void setName(String name){
xxx

你的是:
private String cClientcode;
    private String cPassword;
所以生成的第一个C是要大写的。
}



查了些文章都说这是特例,而且我是用eclipse工具自动生成的
    public String getcClientcode() {
        return cClientcode;
    }
    public void setcClientcode(String cClientcode) {
        this.cClientcode = cClientcode;
    }

文章http://blog.csdn.net/yunye114105/article/details/7364264
提到这种方式和把首字母大写的getCClientcode()/setCClientcode()都可以用,显然struts2是按照后者来识别的, 但是现在eclipse高版本生成的却是前者,这是比较麻烦的 --------------------编程问答-------------------- 别用高版本,用稳定的版本 --------------------编程问答-------------------- private String cClientcode;
private String cPassword;

这种写法可以通过,别说它符合命名规范。

struts里面反射的时候不想考虑太多,这种250写法就会发生问题,你可以换个框架代替struts,也可以换种命名方式

private String cclientCode;
private String cpassword; --------------------编程问答--------------------
引用 4 楼 a470577391 的回复:
别用高版本,用稳定的版本

我用的4.2的eclipse-jee 你们有用别的版本的eclipse对例如uName这种会生成getUName()这样子的set/get方法的么?或者说eclipse对属性的set/get自动生成方式能修改么? --------------------编程问答--------------------
引用 5 楼 forgetsam 的回复:
private String cClientcode;
private String cPassword;

这种写法可以通过,别说它符合命名规范。

struts里面反射的时候不想考虑太多,这种250写法就会发生问题,你可以换个框架代替struts,也可以换种命名方式

private String cclientCode;
private String cpassword;


恩,这样子当然能解决问题,写成这样了是因为我用abator从数据库表中映射出实体类时就自动生成那样的属性名了,用了下出现问题了所以想就这个问题了解下。。。虽然大概知道了些情况,但还是有点小迷糊。。。像uName,Uname这种属性名还是避免使用为妙哇
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,