1. 程式人生 > >在jsp頁面中使用JavaBean

在jsp頁面中使用JavaBean

1.JavaBean

Javabean是一個使用java編寫的可以重複利用、跨平臺的軟體元件。可以將Javabean看做一個具備一定功能的黑盒子,它的主要特性就是實現細節都封裝起來。實際上Javabean是描述java的元件模型,在該模型中,Javabean元件可以修改或與其他元件組合以生成新元件或完整的應用程式。Javabean一種java類,是可以通過封裝成為具體某種功能或者處理某個業務的物件。 jsp對於在web應用中整合Javabean元件提供了完善的支援,這種支援不僅能縮短開發時間(可以直接利用經測試的可信任的元件,避免重複開發),也是jsp應用帶來了更多的可伸縮性。Javabean元件可以用來執行復雜的計算任務,或負責與資料庫的互動,以及資料提取等。
Javabean類從形式上與一般的Java類差別不大,但須注意以下特徵和要求: (1)bean類必須有一個零引數(預設)建構函式。空建構函式在jsp元素建立bean時被呼叫。可以顯式的定義一個零引數建構函式,也可以省略所有的建構函式,系統便會自動建立一個空的建構函式 (2)依照Javabean規範,在Javabean類中,為了令外界可訪問欄位xxx,而且不破壞封裝的要求,不應當將其定義成public可見域,而是應當為其定義getXxx,setXxx方法,作為對應欄位的儲存方法,對於布林欄位,通常使用isXxx方法來查詢欄位值。這種封裝到訪問器中的欄位稱為屬性,而getXxx、setXxx方法稱為訪問器
在jsp中使用一個Javabean之前,要先定義一個合法的Javabean類。該類必須具有一個預設建構函式,並且所有的欄位只能通過訪問器訪問。如果人才管理系統的人才資訊UserEntity實體類就具備了Javabean類特徵,可以當做是一個一個Javabean使用: //人才資訊實體類 public class UserEntity {
private int id = 1;//職工編號
private String name="";//名稱
private String sex="";//性別
private String birth ="";//生日
private String degree ="";//學位
private String in_date="";//入公司日期
private String trans_date="";//轉正日期
private String dept="";//隸屬部門
private String interest="";//興趣愛好
private String specialty="";//特長
//setter和getter方法 .......

2.Javabean屬性

Javabean屬性用於描述Javabean的狀態,如年齡,名稱,電子郵件等。根據Javabean所處的環境,可以通過多種方式使用屬性,可以在Javabean執行時通過getXxx和setXxx方法來改變其屬性。 在Javabean設計中,按照屬性的不同作用分為以下幾類,其中簡單屬性和索引屬性比較常用。 (1)簡單(Simple)屬性。一個Simple型別的屬性表示一個伴隨有一對getXxx()、setXxx()方法的變數。屬性的名稱與該屬性相關的getXxx()、setXxx()方法相對應。如以下程式碼定義一個名為id的屬性: private int id = 1;//職工編號
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

(2)索引(Indexed)屬性。一個Indexed型別的Javabean屬性表示一個數組值,使用與該屬性相對應的setXxx方法和getXxx方法可以存取陣列只能怪某個元素的數值。同時也可以使用另外兩個同名方法一次設定獲得整個陣列的值,即屬性的值,例如: private int[] ids = {1,2,3,4,5};//職工編號
public int[] getIds() {
return ids;
}
public void setIds(int[] ids) {
this.ids = ids;
}
public int[] getIds(int index) {
return ids[index];
}
public void setIds(int index,int id) {
this.ids[index] = id;
}
(3)繫結(Bound)屬性。Javabean元件Bound型別的屬性具有如下特性:當該屬性的值發生變化時,必須通過其他的Javabean元件物件。每當Bound屬性的值改變時,會激發有個PropertyChange事件,改時間封裝了發生屬性改變的事件的屬性名、屬性的原值,屬性變化後的新值,這個時間將被傳遞到訂閱了該事件的其他Javabean元件中,之餘接收到該事件的Javabean元件物件會做出何種動作則由元件自己決定。 (4)約束屬性(Constrained)。Javabean元件的Constrained型別的屬性具有以下性質:當這個屬性的值將要發生變化的時候,與這個屬性已經建立了某種監聽關係的其他java物件都有權否決屬性值的改變。

3.zaijsp中使用Javabean

在jsp頁面中使用Javabean,主要涉及<jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>3個jsp動作元素。 (1)例項化Javabean。jsp的動作元素<jsp:useBean>用於在jsp頁面中例項化一個Javabean元件,這個例項化Javabean元件物件可以在這個jsp頁面的其他地方被呼叫。 <jsp:useBean>的基本語法如下: <jsp:useBean id="name" scope="page|request|session|application" class="className"/> 其中id屬性是用來設定Javabean的名稱,利用id可以識別同一個jsp頁面中使用的不同JavaBean元件例項,class屬性指定jsp引擎查詢Javabean位元組碼的路徑,一般是這個Javabean所對應的Javabean類名。如:com.company.UserEntity;scope屬性用於指定Javabean例項物件的生命週期,也是Javabean的有效作用範圍,scope的值可以是page,request,session和application。 如: <jsp:useBean id="user2" scope="page" class="com.communal.UserEntity"></jsp:useBean>
id="user2"是指定Javabean的名稱或標識,用於類例項的名稱,scope="page"表示該Javabean的作用範圍,page表示只在本jsp頁面範圍內可用,class="com.communal.UserEntity"則說明了該Javabean的類名
(2)存取Javabean的屬性。在jsp頁面中使用<jsp:useBean>將Javabean元件物件例項化後,就可以對它的屬性進行存取,分別使用動作元素<jsp:setProperty>和<jsp:getProperty> <jsp:setProperty property="propertyName" name="name" value=“string”/>
其中name用來指定Javabean的名稱,這個Javabean必須首先使用<jsp:useBean>來例項化,它的值應與<jsp:useBean>操作中的id屬性的值一樣。property屬性被用來指定Javabean需要設定屬性的名稱。value屬性是要賦給Javabean由property指定名稱的屬性值。 <jsp:useBean id="user2" scope="session" class="com.communal.UserEntity"></jsp:useBean>
<jsp:setProperty property="*" name="user2"/>

這是Javabean的一個強大功能:當<jsp:setProperty>動作元素property屬性的值為“*”時,表示希望jsp引擎將使用者請求引數與Javabean進行自動匹配。當用戶請求的引數名稱與Javabean的屬性名稱相匹配時,自動完成屬性賦值。如果request物件的引數值中有空值,那麼對應的Javabean屬性將不會設定任何值。同樣,如果Javabean中有一個屬性沒有與之對應的request引數值,那麼這個屬性同樣也不會設定。 <jsp:getProperty>操作搭配<jsp:useBean>操作一起使用,可以獲取某個Javabean元件物件的屬性值,並使用輸出方法將這個值輸出到頁面。
<jsp:getProperty>動作的語法格式如下:
<jsp:getProperty property="propertyName" name="BeanName" />
其中,name指定Javabean的名稱,需要注意name指定的Javabean元件物件必須已經使用<jsp:useBean>例項化;property:用來指定要讀取的Javabean元件物件的屬性的名稱。 Javabean在伺服器上存在的形式是某個類的例項物件,因而使用<jsp:getProperty>動作等效於直接使用該物件的getXxx方法取得屬性值,如: <%=beanName.getPropertyName()%>