<jsp:setProperty> 動(dòng)作標(biāo)記通常與動(dòng)作標(biāo)記一起使用,它以請(qǐng)求中的參數(shù)給創(chuàng)建的 JavaBean 中對(duì)應(yīng)的屬性賦值,通過(guò)調(diào)用 bean 中的 setXxx() 方法來(lái)完成。其語(yǔ)法格式如下:
{
property="*"
|property="propertyName"
|property="propertyName" parme="parmeterName"
|property="propertyName" value="值"
}
/>
下面對(duì)<jsp:setProperty> 動(dòng)作中各屬性的用法進(jìn)行詳細(xì)介紹。
1、name 屬性:用來(lái)指定一個(gè)存在于 JSP 中某個(gè)范圍內(nèi)的 bean 實(shí)例。
<jsp:setProperty>動(dòng)作標(biāo)記將按照 page、request、session 和 application 的順序來(lái)查找這個(gè) bean 實(shí)例,直到第一個(gè)實(shí)例被找到。如果任何范圍內(nèi)都不存在這個(gè) bean 實(shí)例會(huì)拋出異常。
2、property="*":當(dāng) property 的取值為“*”時(shí),要求 bean 屬性的名稱與類型要與 request 請(qǐng)求中參數(shù)的名稱及類型一致,以便用 bean 中的屬性來(lái)接收客戶輸入的數(shù)據(jù),系統(tǒng)會(huì)根據(jù)名稱來(lái)自動(dòng)匹配。
如果 request 請(qǐng)求中存在值為空的參數(shù),那么 bean 中對(duì)應(yīng)的屬性將不會(huì)被賦值為 null;如果 bean 中存在一個(gè)屬性,但請(qǐng)求中沒(méi)有與之對(duì)應(yīng)的參數(shù),那么該屬性同樣不會(huì)被賦值為 null。這兩種情況下的 bean 屬性都會(huì)保留原來(lái)的值或者默認(rèn)的值。
此種使用方法的限定條件是:請(qǐng)求中參數(shù)的名稱和類型必須與 bean 中屬性的名稱和類型完全一致。但通過(guò)表單傳遞的參數(shù)都是 String 類型,所以,JSP 會(huì)自動(dòng)地將這些參數(shù)轉(zhuǎn)換為 bean 中對(duì)應(yīng)屬性的類型。
表 1 給出了 JSP 自動(dòng)將 String 類型轉(zhuǎn)換為其他類型時(shí)所調(diào)用的方法。
其他類型 |
轉(zhuǎn)換方法 |
---|---|
Integer |
java.lang.Integer.value()Of(String) |
int |
java.lang.Integer.value()Of( String).intValue() |
Double |
java.lang.Double.value()Of(String) |
double |
java.lang.Double.value()Of(String).doubleValue() |
Float |
java.lang.Float.value()Of(String) |
float |
jaya.lang.Float.value()Of(String).floatValue() |
Long |
java.lang.Long.value()Of(String) |
long |
java.lang.Long.value()Of( String).longValue() |
Boolean |
java.lang.Boolean.value()Of(String) |
boolean |
java.lang.Boolean.value()Of(String).booleanValue() |
Byte |
java.lang.Byte.value()Of(String) |
byte |
java.lang.Byte.value()Of(String).byteValue() |
3、property="upropertyName":當(dāng) property 屬性取值為 bean 中的屬性時(shí),只會(huì)將 request 請(qǐng)求中與該 bean 屬性同名的一個(gè)參數(shù)的值賦給這個(gè) bean 屬性。
如果請(qǐng)求中沒(méi)有與 property 所指定的同名參數(shù),則該 bean 屬性會(huì)保留原來(lái)的值或默認(rèn)的值,而不會(huì)被賦值為 null。與 property 屬性值為時(shí)一樣,當(dāng)請(qǐng)求中參數(shù)的類型與 bean 中的屬性類型不一致時(shí),JSP 會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換。
4、property="propertyName" param="parameterName":property 屬性指定 bean 中的某個(gè)屬性,param 屬性指定 request 請(qǐng)求中的參數(shù)。該種方法允許將請(qǐng)求中的參數(shù)賦值給 bean 中與該參數(shù)不同名的屬性。
如果 param 屬性指定參數(shù)的值為空,那么由 property 屬性指定的 bean 屬性會(huì)保留原來(lái)的值或默認(rèn)的值,而不會(huì)被賦為 null。
5、property="propertyName" value="值":value 屬性指定的值可以是一個(gè)字符串?dāng)?shù)值或表示一個(gè)具體值的 JSP 表達(dá)式或 EL 表達(dá)式,該值將被賦給 property 屬性指定的 bean 屬性。
當(dāng) value 屬性是一個(gè)字符串時(shí),如果指定的 bean 屬性與其類型不一致,JSP 會(huì)將該字符串值自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的類型。
當(dāng) value 屬性指定的是一個(gè)表達(dá)式時(shí),則該表達(dá)式所表示的值的類型必須與 property 屬性指定的 bean 屬性一致,否則,將會(huì)拋出 argument type mismatch 異常。