一、在JSP中如何使用JavaBean
为了能在JSP页面中集成JavaBean组件和支持JavaBean的功能,JSP规范专门定义了三个JSP标签:<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>,它们分别用于创建和查找JavaBean的实例对象,设置JavaBean对象的属性,读取JavaBean对象的属性。对于JSP页面来说,只要一个类具有一个公共的、无参数的构造方法,就可以把这个类当做JavaBean来使用,如果类中有不接受任何参数的getter方法或只接受一个参数的setter方法,就可以把前缀get或set后面的部分当着一个属性名来引用。例如,JDK自带的java.util.Date类具有一个公共的、无参数的构造方法,其中还包含一个定义的方法:
public void setTime(long time)
因此,在JSP页面可以把该类当做一个JavaBean来看待,且认为该JavaBean包含一个time的属性。
JSP页面按照调用JavaBean的方式对Date类进行调用
<jsp:useBean id="currentDate" class="java.util.Date" />
<jsp:setProperty name="currentDate" property="time" value="1234567" />
<jsp:getProperty name="currentDate" property="time" />
JSP页面像调用一个普通Java类的方式调用JavaBean
<%
java.util.Date currentDate = new java.util.Date();
currentDate.setTime(1234567);
out.println(currentDate.getTime());
%>
二、<jsp:useBean>标签
该标签用于在某个指定的域范围(application、session、request、pageContext等)中查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用。如果不存在则实例化一个新的JavaBean对象,并将它按指定的名称存储在指定的域范围中。常见语法如下:
<jsp:useBean id="beanInstanceName" class="package.class"
scope="page|request|session|application" />
其中,class属性用于指定JavaBean的完整类名,JSP引擎将使用这个类名来创建JavaBean的实例对象或作为查找到JavaBean对象的类型;id属性用于指定JavaBean实例对象的引用名称和其存储在域范围的名称;scope属性用于指定JavaBean实例对象所存储的域范围,其默认值是page。
page表示将JavaBean实例对象存储在PageContext对象中,默认存储进page域范围;
request表示将JavaBean实例对象存储在ServletRequest对象中;
session表示将JavaBean实例对象存储在HttpSession对象中。此设置要求当前JSP页面支持Session,即没有将page指令的session属性设置为false;
application表示将JavaBean实例对象存储在ServletContext对象中。
除了上述几个属性,该标签还有:
type属性
用于指定JavaBean实例对象的引用变量的类型,它必须是JavaBean对象的类名称、父类名称或所实现的接口名称中的一个。type属性的默认值为class属性的设置值,当JSP引擎将标签翻译成Servlet程序中的代码时,将使用type属性值作为JavaBean对象引用变量的类型。
beanName属性
用于指定JavaBean的名称,这个名称不是JavaBean实例对象的引用名称,而是JavaBean规范中定义的一种名称,它将作为传递给java.beans.Beans类的instantiate方法的参数。java.beans.Beans类的instantiate方法可以从这个资源文件中产生JavaBean的实例对象。设置该属性不能同时设置class属性,但必须同时设置type属性。
<jsp:useBean>标签除了可以按照空元素的方式进行使用外,还可以按容器元素的格式进行使用,如:
<jsp:useBean...>
Body
</jsp:useBean...>
Body部分只在标签创建JavaBean的实例对象时才执行,也就是说,如果scope属性指定的域范围存在id属性指定的JavaBean对象,那Body内容将被忽略。
三、<jsp:setProperty>标签
该标签用于设置JavaBean对象的属性,也就是调用JavaBean对象的setter方法,其语法如下:
<jsp:setProperty name="beanInstanceName" property="propertyName"
[ value="{string | <%= expression %>}" | param="parameterName" ] |
property="*"
/>
name属性是必不可少的,用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性相同。
property属性是必不可少的,用于指定JavaBean实例对象的属性名。
value属性是可选的,它用于指定JavaBean实例对象的某个属性的值,value属性的设置值可以是一个字符串,也可以是一个表达式。如果是value属性的设置值是字符串,那么它将自动转换成所要设置的JavaBean属性的类型;如果是表达式,则表达式的结果类型与所要设置的JavaBean属性的类型一致(不一致则报错)。
param属性是可选的,它用于将请求参数的值赋给JavaBean实例对象的某个属性。如果当前请求消息中没有param属性所指定的请求参数,该标签不会将null赋给JavaBean属性,所设置的JavaBean属性仍将等于其原来的初始值,value和param属性不能同时使用。
property="*",这种形式用于对JavaBean实例对象多个属性进行赋值,它表示将请求消息中的参数逐一与JavaBean实例对象中的属性进行比较,如果找到同名的属性,则将该参数赋给该属性,不存在则不会被赋值。
注意:如果param属性和value属性都没有设置,且property="prppertyName",它等效于param属性的设置值与property属性值相同的情况
四、<jsp:getProperty>标签
该标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中,其使用语法如下:
<jsp:getProperty name="beanInstanceName" property="PropertyName" />
其中,name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同,property属性用于指定JavaBean实例对象的属性名,如果一个JavaBean实例对象的某个属性的值为null,则该标签输出该属性的结果将是内容为null的字符串。
来源:oschina
链接:https://my.oschina.net/u/1171518/blog/227103