1 JavaBean 介绍
1.1 定义:
在一个应用里面可以被重用和组合的 java 类。
1.2 Javabean 的特点:
(1)实现了可序列化(可以通过网络交换到磁盘文件中)
(2)无参的构造器
(3)有属性,并且为属性提供 getXxx() 和 setXxx ()方法。(如果是 boolean 类型的属性还可以提供
isXxx())
注意:getXxx () 、set()Xxx方法不是必须的,但是如果想要在 JSP 页面中可以为这些属性赋值的话就必须在 JavaBean 中提供 setXxx () 方法,如果想到这些属性则必须在 JavaBean 中提供 getXxx () 方法。如果不提供 getXxx ()、set()Xxx 方法,则其只能称为成员变量,而不能称为 JavaBean 的属性。
(4)可以作为事件源,通过事件与别的组件沟通。
2 JavaBean 在 JSP 中的应用:
2.1 在页面中生成实例:
<jsp: useBean id=”user” class=”com.tarena.User” scope=”session”/>
创建或查找指定类型( class 属性所指定的)的(在 scope 属性指定的范围中[属性] ) 一个 JavaBean 对象(必须有缺省的构造器)。属性名称为 id 属性的值,同时该动作声明了一个名字为 game 的临时变量。
id : 实例的名字
class : 这个类字节码文件存放的位置,还可以用 type 代替。
scope: 实例生效的范围,缺省的是 page 范围。
注意:两者的差别
class:如果对象在 scope范围内不存在:创建新的对象,并且以 id 属性的值为属性名称保存到 scope 属性所指定的范围的属性中,只能是具体类。
type: 如果这个范围内没有实例,不创建新的对象,抛出异常,可以是接口。
2.2 为属性赋值:
<jsp: setProperty name=”beanName” property =”propertyName” param=”paramName”/>
设置某个 JavaBean 中某个属性的值(调用某个 JavaBean 的 set 方法)。
name: 实例的名字,与 jsp:useBean 中的 id 相对应
property: 属性的名字(要求 JavaBean 必须有该属性的 set 方法)
param: 用表单中指定的参数来为 JavaBean 属性赋值
value:将 value 中的值赋给 JavaBean 中的属性。
<jsp: setProperty name=”beanName” property =”*” >
所有的属性都与表单里面提交的名字相同,找到相同的就赋值,找不到就什么也不做
<jsp:setProperty name=“beanName” property=“propName” value=“string constant”/> 固定值
<jsp:setProperty name=“beanName” property=“propName” param=“paramName”/> 指定参数名
<jsp:setProperty name=“beanName” property=“propName”/> 和属性名相同的参数
<jsp:setProperty name=“beanName” property=“*”/> 所有的同名参数
<jsp:setProperty name= “beanName” property= “propName” value= “<%=expression%>”/>
用表达式的,明确指定
2.3 取得实例的属性:
<jsp: getProperty name=”beanName” property =”propName” >
取得实例的一个属性,返回值都为字符串的形式
<%=numguess.getHint()%>
多用这个表达式,上面的命名必须符合 set/get 要求
2.4 注意:
<jsp:useBean id=”user” class=”com.bean.User” scope=”session”>
<jsp:setProperty name=”user” property=”*” />
</jsp:useBean>
将 jsp:setProperty 写在 jsp:useBean 中时,请求范围时,不会出错;但在会话范围时,会出错,setProperty 只会在 javabean 被创建时,才会调用,只是查找到时,setProperty 不会被调。
在开发时,一定要将 jsp:setProperty 放在外面。
<jsp:useBean id=”user” class=”com.bean.User” scope=”session”/>
<jsp:setProperty name=”user” property=”*” />