<jsp:setProperty> 動作標記通常與動作標記一起使用,它以請求中的參數給創建的 JavaBean 中對應的屬性賦值,通過調用 bean 中的 setXxx() 方法來完成。其語法格式如下:
{
property="*"
|property="propertyName"
|property="propertyName" parme="parmeterName"
|property="propertyName" value="值"
}
/>
下面對<jsp:setProperty> 動作中各屬性的用法進行詳細介紹。
1、name 屬性:用來指定一個存在于 JSP 中某個范圍內的 bean 實例。
<jsp:setProperty>動作標記將按照 page、request、session 和 application 的順序來查找這個 bean 實例,直到第一個實例被找到。如果任何范圍內都不存在這個 bean 實例會拋出異常。
2、property="*":當 property 的取值為“*”時,要求 bean 屬性的名稱與類型要與 request 請求中參數的名稱及類型一致,以便用 bean 中的屬性來接收客戶輸入的數據,系統會根據名稱來自動匹配。
如果 request 請求中存在值為空的參數,那么 bean 中對應的屬性將不會被賦值為 null;如果 bean 中存在一個屬性,但請求中沒有與之對應的參數,那么該屬性同樣不會被賦值為 null。這兩種情況下的 bean 屬性都會保留原來的值或者默認的值。
此種使用方法的限定條件是:請求中參數的名稱和類型必須與 bean 中屬性的名稱和類型完全一致。但通過表單傳遞的參數都是 String 類型,所以,JSP 會自動地將這些參數轉換為 bean 中對應屬性的類型。
表 1 給出了 JSP 自動將 String 類型轉換為其他類型時所調用的方法。
其他類型 |
轉換方法 |
---|---|
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":當 property 屬性取值為 bean 中的屬性時,只會將 request 請求中與該 bean 屬性同名的一個參數的值賦給這個 bean 屬性。
如果請求中沒有與 property 所指定的同名參數,則該 bean 屬性會保留原來的值或默認的值,而不會被賦值為 null。與 property 屬性值為時一樣,當請求中參數的類型與 bean 中的屬性類型不一致時,JSP 會自動進行轉換。
4、property="propertyName" param="parameterName":property 屬性指定 bean 中的某個屬性,param 屬性指定 request 請求中的參數。該種方法允許將請求中的參數賦值給 bean 中與該參數不同名的屬性。
如果 param 屬性指定參數的值為空,那么由 property 屬性指定的 bean 屬性會保留原來的值或默認的值,而不會被賦為 null。
5、property="propertyName" value="值":value 屬性指定的值可以是一個字符串數值或表示一個具體值的 JSP 表達式或 EL 表達式,該值將被賦給 property 屬性指定的 bean 屬性。
當 value 屬性是一個字符串時,如果指定的 bean 屬性與其類型不一致,JSP 會將該字符串值自動轉換成對應的類型。
當 value 屬性指定的是一個表達式時,則該表達式所表示的值的類型必須與 property 屬性指定的 bean 屬性一致,否則,將會拋出 argument type mismatch 異常。