2.5.3 useBean、 setProperty、 getPropelty指令
2.5.3 useBean、 setProperty、 getPropelty指令
这三个指令都是与JavaBean
相关的指令,其中
useBean
指令用于在JSP
页面中初始化一个JAVA
实例;setProperty
指令用于为JavaBean
实例的属性设置值;getProperty
指令用于输出JavaBean
实例的属性
如果多个JSP
页面中需要重复使用某段代码,则可以把这段代码定义成Java
类的方法,然后让多个JSP
页面调用该方法即可,这样可以达到较好的代码复用。
useBean指令
useBean
的语法格式如下:
1 | <jsp:useBean id="beanInstanceName" class="className" scope="page | request | session | application" /> |
其中,
id
属性是JavaBean
的实例名,class
属性确定JavaBean
的实现类。scope
属性用于指定JavaBean
实例的作用范围,scope
属性有以下4个值:page
:该Javabean
实例仅在该页面有效request
:该Javabean
实例在本次请求有效。session
:该JavaBean
实例在本次session
内有效。application
:该JavaBean
实例在本应用内一直有效。
setProperty指令
setProperty
指令的语法格式如下:
1 | <jsp:setProperty name="beanName" property="propertyName" value="value"/> |
其中,
name
属性确定需要设定JavaBean
的实例名;property
属性确定需要设置的属性名;value
属性则确定需要设置的属性值
getProperty指令
getProperty
的语法格式如下:
1 | <jsp:getProperty name="beanName" property="propertyName"/> |
其中,
name
属性确定需要输出的JavaBean
的实例名;property
属性确定需要输出的属性名。
beanTest.jsp
下面的JSP
页面示范了如何使用这三个动作指令来操作JavaBean
.
1 | <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> |
setProperty和getProperty指令通过调用JavaBean的setter和getter方法来操作javaBean属性
上页面中示范了使用useBean
、setProperty
和getProperty
来操作JavaBean
的方法。
对于上面的JSP
页面中的setProperty
和getProperty
标签而言,它们都要求根据属性名来操作JavaBean
的属性。
实际上setProperty
和getProperty
要求的属性名,与Java
类中定义的属性有一定的差别,例如setProperty
和getProperty
需要使用name
属性,但JavaBean
中是否真正定义了name
属性并不重要,重要的是在JavaBean
中提供了setName()
和getName()
方法即可。
事实上,当页面使用setProperty
和getProperty
标签时,系统底层就是调用setName()
和getName()
方法来操作Person
实例的属性的。
Person.java
下面是Person
类的源代码。
1 | package lee; |
上面的Person.java
只是源文件,此处将该文件放在Web
应用的WEB-INF\src\
路径下,实际上**Java
源文件对Web
应用不起作用**,所以此处会使用Ant
来编译它,并将编译得到的二进制文件放入WEB-INF\classes\
路径下。而且,为Web
应用提供了新的class
文件后,必须重启该Web
应用,让它可以重新加载这些新的class
文件。
该页面的执行效果如图2.15所示。
beanTest2.jsp
对于上面三个标签完全可以不使用,将beanTest.jsp
修改成如下代码,其内部的执行是完全一样的
1 | <%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %> |
手动创建的javaBean需要手动指定要放入的scope
使用useBean
标签时,除在页面脚本中创建了JavaBean
实例之外,该标签还会将该JavaBean
实例放入指定scope
中.
所以在脚本中创建号javaBean
后,通常还需要在脚本中将该JavaBean
放入指定scope
中,如下面的代码片段所示:
1 | //将p1放入page的生存范围中 |
关于page
、request
、session
和application
四个生存范围请参看下一节介绍