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四个生存范围请参看下一节介绍