最近刚开始学习Java Web开发,感觉很难,可能是思维方式不同,接受能力不强。学到javaBean的时候,遇到了一个jsp:useBean的问题,纪录一下,供以后查阅学习。
什么是javaBean
百度百科:JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,long和class方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。
从百科上面的说法可以知道,规范的JavaBean,除了属性及对应的getter和setter,默认的构造函数之外,不应该包含其他的代码。
javaBean在jsp中的使用
javaBean在jsp中,可以当做普通的类使用,也可以直接用jsp标签的方式使用。
定义javaBean
首先定义一个javaBean,代码如下:
package com.test.investigation;
public class Paper {
private String[] languages;
private String[] technics;
private String[] parts;
public String[] getTechnics() {
return technics;
}
public void setTechnics(String[] technics) {
this.technics = technics;
}
public String[] getParts() {
return parts;
}
public void setParts(String[] parts) {
this.parts = parts;
}
public Paper() {
// TODO Auto-generated constructor stub
}
public String[] getLanguages() {
return languages;
}
public void setLanguages(String[] languages) {
this.languages = languages;
}
}
javaBean的初始化
首先看如下代码:
<jsp:useBean id="paper" class="com.test.investigation.Paper"></jsp:useBean>
以上代码用于初始化一个javaBean,id属性,就像是一个类的实例名,相当于在内部执行如下代码:
com.test.investigation.Paper paper = new com.test.investigation.Paper();
设置id属性,就相当于传入一个类实例的名称,而class属性则指明了该实例的类类型。
javaBean属性值的获取
javaBean属性值的获取方法如下所示:
<jsp:getProperty name="paper" property="languages"></jsp:getProperty>
同样的,name属性,与jsp:useBean标签中指定的id属性一致,property则指定了javaBean中的属性值。
设置javaBean的值
javaBean值的设置有两种,一种是指定value,一种是用request对象中的值。
指定Value
<jsp:setProperty property="languages" name="paper" value="Java"></jsp:setProperty>
当然以上代码是错误的,因为languages在javaBean中是一个数组,本人初学,不知道能不能这样给数组设置值,该代码在eclipse中报错
Cannot set indexed property
使用reqeust
使用request的方式更加简单,javaBean中的值是由其他页面传过来的,按如下使用:
<jsp:setProperty property="*" name="paper"></jsp:setProperty>
这种方式假设javaBean中的属性与request中的参数名称一致。然后对应的会将request中的参数,设置到对应的值上面去。
那么问题来了
我在学这个的时候,一直很奇怪,是不是只要和javaBean里的属性名字对应就能设置呢?于是,我修改了languages变量的名字,发现一样能成功设置,我就纳闷了。为什么我明明修改了名字,但是却还是能设置呢??于是我重新生成了getter和setter方法,这时候错误终于来了,说找不到getLanguage方法。由此可以猜测:
- request中的参数并不是和javaBean中的属性对应
- request设置javaBean参数的时候,是以request中的参数为名字,根据java中getter和setter的规则,查找对应的getter和setter方法。
我不知道我自己的想法是不是正确的,至少到目前来说,我从碰到的问题中看到的是这样的。纯属初学,如有错误,请勿见怪。