1.在JSP中可以像使用普通类一样访问javabean,例如,通过java脚本实例化javabean、调用javabean对象的方法等。为了能在jsp页面中中更好地集成javabean和支持javabean的功能,JSP还提供了三个动作元素来访问javabean,分别为<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>,这三个动作元素分别用于创建或查找javabean实例对象、设置javabean对象的属性值和获取javabean对象的属性值。
示例:使用动作元素访问javabean
<jsp:useBean id="product" class="com.javaBean.ProductBean"/>
<jsp:setProperty property="price" value="23.5" name="product"/>
<jsp:setProperty property="num" value="2" name="product"/>
<jsp:getProperty property="totalPrice" name="product"/>
上述示例使用<jsp:useBean>元素创建或查找一个JavaBean对象product;
使用<jsp:setProperty>元素为Javabean对象product的price和num属性赋值;
使用<jsp:getProperty>元素获取并输出Javabean对象product的totalPrice属性值。
示例:使用java脚本访问javabean
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="com.javabean.ProductBean"%>
<%
Object obj=pageContext.getAttribute("product");
ProductBean product=null;
if(obj==null){
product=new ProductBean();
pageContext.setAttribute("product",product,pageContext、PAGE_SCOPE);
}else{
product=(ProductBean)obj;
}
product.setPrice(23.5f);
product.setNum(2);
%>
<%=product.getTotalPrice()%>
通过上述两个例子对比可以看出,使用动作元素对javabean的访问没有一句java代码,这种方式更易于降低对页面设计人员的编程要求、增强页面的可维护性。因此在实际开发中,应该更多地采用动作元素访问javabean的方式。
2.<jsp:useBean>元素
用于在某个指定的作用域范围内查找一个指定名称的javabean对象,如果存在则直接返回javabean对象的引用,如果不存在则实例化一个新的javabean对象,并将它按指定的名称存储在指定的作用域范围内。
语法:
<jsp:useBean id="beanInstanceName" class="package.class" scope="page\request\session\application"/>
(1)id属性:用于指定javabean对象的引用名称和其存储域属性名。
(2)class属性:用于指定javabean的权限定名。
(3)scope属性:用于指定javabean对象的存储域范围,其取值只能是page、request、session和application4个值中的一个,默认为page。
示例:<jsp:useBean>元素的使用
product.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="product" class="com.javaBean" scope="page"/>
</body>
</html>
可查看product.jsp文件生成的Servlet源文件(product_jsp.java),可以看到该元素翻译成的java代码。
3.<jsp:setProperty>元素
用于设置javabean对象的属性,相当于调用javabean对象的setter方法。
语法;
<jsp:setProperty name="beanInstanceName" property="propertyName" value="propertyvalue"/
property="propertyName" param="parameterName"/
property="propertyName"/
property="*"
/>
(1)name属性用于指定javabean对象的名称,其值与<jsp:useBean>标签中的id属性值相同。
(2)property属性用于指定javabean对象的属性。
(3)value属性用于指定javabean对象的某个属性的值,可以是一个字符串也可以是一个表达式,它将被自动转换为所要设置的javabean属性的类型,该属性可选。
(4)param属性用于将一个请求参数的值赋给javabean对象的某个属性,它可以将请求参数的字符串类型的返回值转换为javabean属性所对应的类型,该属性可选。value和param不能同时使用。
示例:
(1)
<jsp:setProperty name="product" property="price" value="23.5"/>
(2)
<% float price=23.5f;%>
<jsp:setProperty name="product" property="price" value="<%=price%>"/>
此示例形式表示使用一个表达式的value属性值来指定javabean对象的product的price属性的值。
(3)
//假设有一请求:http://localhost:8080/chapter07/product.jsp?priceParam=23.5
<jsp:setProperty name="product" property="price" param="priceParam"/>
此示例形式表示通过param属性来将请求参数priceParam的值赋给javabean的对象product的price属性,其中,字符串类型的请求参数值将被自动转换为与javabean对应属性相同的类型。
(4)
//假设有一请求:http://localhost:8080/chapter07/product.jsp?priceParam=23.5
<jsp:setProperty name="product" property="price" />
此示例形式表示将javabean对象product的price属性的值设置为与该属性同名(包括名称大小写要完全一致)的请求参数的值。它等同于param属性的值也为price的情况。
(5)
//假设有一请求:http://localhost:8080/chapter07/product.jsp?priceParam=23.5&num=2
<jsp:setProperty name="product" property="*" />
<jsp:setProperty>元素还可用于<jsp:useBean>元素起始标签和终止标签间,表示在此javabean对象实例化时,对其属性进行初始化。
示例:
<jsp:useBean id="product" class="com.javabean.productBean">
<jsp:setProperty name="product" property="price" value="23.5"/>
<jsp:setProperty name="product" property="num" value="2"/>
</jsp:useBean>
由于嵌套在<jsp:useBean>中的<jsp:setProperty>元素只有在实例化javabean对象时才被执行,因此如果<jsp:useBean>元素所引用的javabean对象已经存在,嵌套在其中的<jsp:setProperty>元素将不被执行,只能在javabean对象初始化时执行一次。
4.<jsp:getProperty>元素
用于读取javabean对象的属性,等同于调用javabean对象的getter方法,然后将读取的属性值转换成字符串后输出到响应正文中。
语法示例:
<jsp:getProperty name="product" property="totalPrice"/>