JSP的指令
useBean
创建一个class属性指定的Bean对象,然后将它绑定在由id属性给出的变量上
id
命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例。
class
指定Bean的完整包名。
scope
属性:指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,session和application。
1. request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。
2. session表示该Bean对当前HttpSession内的所有页面都有效。
3. 如果取值application,则表示该Bean对所有具有相同ServletContext的页面都有效。
scope之所以很重要,是因为jsp:useBean只有在不存在具有相同id和scope的对象时才会实例化新的对象;
如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略。
type
指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的。
beanName
指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性。
<jsp:useBean id="guessBiz" class="biz.GuessBiz" scope="session" />
setproperty & getproperty
<jsp:setProperty>
用来设置已经实例化的Bean对象的属性
第一种形式:
<jps:setProperty name = "JavaBean实例名" property = "*"/>
该形式是设置Bean 属性的快捷方式.在Bean 中属性的名字,类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。
property = “*”表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
第二种形式:
<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" />
使用request对象中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean 的属性名,而且Bean 属性和request参数的名字应相同。也就是说,如果在Bean 中有setUserName(String userName)方法,那么,propertyName的值就是”userName”.这种形式灵活性较强,可以有选择的对Bean中的属性赋值
第三种形式:
<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "BeanValue"/>
value用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如“true”)通过Boolean.valueOf转换,int和Integer类型的属性值(比如“42”)通过Integer.valueOf转换。
第四种形式:
<jsp:setProperty name = "JavaBean实例名"
property = "propertyName" param = "request对象中的参数名"
/>
param指定用哪个请求参数作为Bean属性的值。Bean 属性和request参数的名字可以不同。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。
例如,下面的代码片断表示:如果存在numItems请求参数的话,把numberOfItems属性的值设置为请求参数numItems的值;否则什么也不做。
<jsp:setProperty name="orderBean" property="numberOfItems" param="numItems" />