Jsp同页面var传值java,【JavaWEB SSH】jsp页面传值后台Controller 部分值绑定不上实体类...

本文探讨了JavaBean命名规范,强调了getter和setter方法的正确编写方式,特别是针对boolean属性的特殊规则。同时,文章还展示了前端Ajax与后端交互的示例,解释了在Struts项目中可能出现的属性访问问题及其解决方案。强调了JavaBean的公共类、构造函数、属性访问权限以及getter/setter方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//前端ajax代码

1 var oldpassword = $('#old_password').val();2 var password = $('#L_pass').val();3 var usercode = $('#usercode').val();4 var username=$('#username').val();5 var user = {usercode:usercode,password:password,oldpassword:oldpassword,username:'admin'};6 $.ajax({7 url:"/CMS/User/UserEditPWD",8 type:"post",9 data:user,10

11 success:function(res){12 if(res=='true'){13 layer.alert("修改密码成功", {icon: 6},function() {14 //获得frame索引

15 window.parent.location.reload();16 var index =parent.layer.getFrameIndex(window.name);17 //关闭当前frame

18 parent.layer.close(index);19 });20 }else{21 layer.msg('修改失败,请注意旧密码是否正确', {icon: 6});22 }23 }24 });25 return false

26 });

后端model代码 修改后

packagecom.supercontrol.cms.model;importjava.util.Date;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;importjavax.persistence.Table;importjavax.persistence.UniqueConstraint;importorg.hibernate.annotations.GenericGenerator;importcom.supercontrol.cms.controller.annotation.global.Global.LeiMode;

@Entity

@Table(name="CMS_USER")public classUser {

@Id

@GeneratedValue(generator= "system-uuid")

@GenericGenerator(name= "system-uuid", strategy = "uuid")

@LeiMode("ID")privateString id;

@Column(length=32)

@LeiMode("用户编号")privateString usercode;

@Column(length=32)

@LeiMode("用户名称")privateString username;

@LeiMode("旧用户密码")privateString oldpassword;

@Column(length=32)

@LeiMode("用户密码")privateString password;

@Column(length=32)

@LeiMode("是否使用")privateString userUsed;

@Column(length=32)

@LeiMode("用户部门")privateString userDepart;

@Column(length=32)

@LeiMode("用户角色")privateString userRole;

@Column(length=32)

@LeiMode("创建人")privateString userCreater;

@Column(length=32)

@LeiMode("创建时间")privateString userCreatetime;

@Column(length=32)

@LeiMode("更新人")privateString userUpdater;

@Column(length=32)

@LeiMode("更新时间")privateString userUpdatetime;

@Column(length=32)publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}public String getUsercode() { returnusercode; }public void setUsercode(String usercode) { this.usercode =usercode; }public String getUsername() { returnusername; }public void setUsername(String username) { this.username =username; }public String getPassword() { returnpassword; }public void setPassword(String password) { this.password =password; }public String getOldpassword() { returnoldpassword; }public void setOldpassword(String oldpassword) { this.oldpassword =oldpassword; }public String getUserUsed() { returnuserUsed; }public void setUserUsed(String userUsed) { this.userUsed =userUsed; }public String getUserRole() { returnuserRole;}public voidsetUserRole(String userRole) {this.userRole =userRole;

}publicString getUserCreater() {returnuserCreater;

}public voidsetUserCreater(String userCreater) {this.userCreater =userCreater;

}publicString getUserCreatetime() {returnuserCreatetime;

}public voidsetUserCreatetime(String userCreatetime) {this.userCreatetime =userCreatetime;

}publicString getUserUpdater() {returnuserUpdater;

}public voidsetUserUpdater(String userUpdater) {this.userUpdater =userUpdater;

}publicString getUserUpdatetime() {returnuserUpdatetime;

}public voidsetUserUpdatetime(String userUpdatetime) {this.userUpdatetime =userUpdatetime;

}publicString getUserDepart() {returnuserDepart;

}public voidsetUserDepart(String userDepart) {this.userDepart =userDepart;

}

}

修改前

@Column(length=32)

@LeiMode("旧用户密码")privateString oldpassword;

//错误为不符合命名规范,声明参数全小写,方法只能第一个大写,其余不能使用驼峰命名法。

//getXxx,setXxxpublic String getOldPassWord() { returnoldpassword; }public void setOldPassWord(String oldpassword) { this.oldpassword =oldpassword; }

[转]

最近的struts项目中遇到了这样的问题: 我的action中全局变量明明有getset方法,而且是自动生成的,但是在使用的时候,总是说找不到这个属性的getset方法,取不到从jsp传来 的值, 原因如下:变量名为:hDeptment,在自动生成getset方法为:setHDeptment,getHDeptment。下面是解释这个问题。

(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public  ,如: public class user{......}

(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器

(3)一个javaBean类不应有公共实例变量,类变量都为private  ,如: private int id;

(4)属性应该通过一组存取方法(getXxx 和 setXxx)来访问,一般是IDE(Eclipse、JBuilder) 为属性生成getter/setter 方法

一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。

但是,还有一些特殊情况:

1、如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。

2、如果前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。

3、如果首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。

所以在action的全局变量和JavaBean命名时应该注意符合以上命名规范。

附下表,看看吧:

————————————————————————————————————————————————————————

属性名/类型                    |                       getter 方法              |                    setter 方法

————————————|——————————————————|——————————————————————————

xcoordinate/Double     | public Double getXcoordinate()     | public void setXcoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

xCoordinate/Double    | public Double getxCoordinate()     |public void setxCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

XCoordinate/Double    |public Double getXCoordinate()     | public void setXCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

Xcoordinate/Double     |不允许                                             |    不允许

————————————|——————————————————|——————————————————————————

分割线 ==========================================================================================

遇到一个异常:

javax.servlet.jsp.el.ELException: Unable to find a value for “isActive” in object of class “com.mycompany.domain.User” using operator “.”

使用“.”运算符,在User类的对象中,找不到isActive的值。

错误之处是,在JSP页面中我使用了:

${user.isActive}

检查后发现没有写属性isActive的getter方法,那好,利用IntelliJ IDEA的自动生成代码功能,补上:

public boolean isActive() {

return isActive;

}

运行,还是不对,问Erik,他说JavaBean命名规范里面规定,对于primitive和自定义类类型的属性property(小 写),getter和setter方法就是getProperty和setProperty(第一个字母变大写,前面再加get或set)。而对于类型为 boolean的属性,getter方法还可以写为isProperty(getProperty仍然可用),而且,如果属性的前两个字母是is(两个小 写),则getter与property完全同名(比如上面属性isActive的getter就是isActive())。

如果有个叫isIsActive的boolean类型属性,它的getter呢?答案还是isIsActive()。

所以,无论属性名是isActive还是active,getter只能是isActive()或者getActive(),JSP里只能用${user.active}来访问(注意大小写)。

最好的办法是不要以“is”作为开头来命名boolean类型的属性,以免混淆。

分割线====================================================================================

总之,javaBean中,要设置或获取某个property的值,就需要相应的get和set方法,对于boolean型,你可以用get/set方式来处理boolean,可以用is来代替get;

再者,一定要注意javaBean中的命名规范!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值