<jsp:useBean>動作元素
jsp:useBean動作用來裝載一個將在JSP頁面中使用的JavaBean。
這個功能非常有用,因為它使得我們既可以發揮Java組件重用的優勢,同時也避免了損失JSP區別於Servlet的方便性。
jsp:useBean動作最簡單的語法為:
<jsp:useBean id="name" class="package.class" />
在類載入后,我們既可以通過 jsp:setProperty 和 jsp:getProperty 動作來修改和檢索bean的屬性。
以下是useBean動作相關的屬性列表。
屬性 | 描述 |
---|---|
class | 指定Bean的完整包名。 |
type | 指定將引用該對象變量的類型。 |
beanName | 通過 java.beans.Beans 的 instantiate() 方法指定Bean的名字。 |
在給出具體實例前,讓我們先來看下 jsp:setProperty 和 jsp:getProperty 動作元素:
<jsp:setProperty>動作元素
jsp:setProperty用來設置已經實例化的Bean對象的屬性,有兩種用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty,如下所示:
<jsp:useBean id="myName" ... /> ... <jsp:setProperty name="myName" property="someProperty" .../>
此時,不管jsp:useBean是找到了一個現有的Bean,還是新創建了一個Bean實例,jsp:setProperty都會執行。第二種用法是把jsp:setProperty放入jsp:useBean元素的內部,如下所示:
<jsp:useBean id="myName" ... > ... <jsp:setProperty name="myName" property="someProperty" .../> </jsp:useBean>
此時,jsp:setProperty只有在新建Bean實例時才會執行,如果是使用現有實例則不執行jsp:setProperty。
屬性 | 描述 |
---|---|
name | name屬性是必需的。它表示要設置屬性的是哪個Bean。 |
property | property屬性是必需的。它表示要設置哪個屬性。有一個特殊用法:如果property的值是"*",表示所有名字和Bean屬性名字匹配的請求參數都將被傳遞給相應的屬性set方法。 |
value | value 屬性是可選的。該屬性用來指定Bean屬性的值。字符串數據會在目標類中通過標准的valueOf方法自動轉換成數字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean類型的屬性值(比如"true")通過 Boolean.valueOf轉換,int和Integer類型的屬性值(比如"42")通過Integer.valueOf轉換。 value和param不能同時使用,但可以使用其中任意一個。 |
param | param 是可選的。它指定用哪個請求參數作為Bean屬性的值。如果當前請求沒有參數,則什么事情也不做,系統不會把null傳遞給Bean屬性的set方法。因此,你可以讓Bean自己提供默認屬性值,只有當請求參數明確指定了新值時才修改默認屬性值。 |
<jsp:getProperty>動作元素
jsp:getProperty動作提取指定Bean屬性的值,轉換成字符串,然后輸出。語法格式如下:
<jsp:useBean id="myName" ... /> ... <jsp:getProperty name="myName" property="someProperty" .../>
下表是與getProperty相關聯的屬性:
屬性 | 描述 |
---|---|
name | 要檢索的Bean屬性名稱。Bean必須已定義。 |
property | 表示要提取Bean屬性的值 |
實例
以下實例我們使用了Bean:
/* 文件: TestBean.java */ package action; public class TestBean { private String message = "No message specified"; public String getMessage() { return(message); } public void setMessage(String message) { this.message = message; } }
編譯以上實例並生成 TestBean.class 文件,將該文件拷貝至服務器正式存放Java類的目錄下,而不是保留給修改后能夠自動裝載的類的目錄( 如:C:\apache-tomcat-7.0.2\webapps\WEB-INF\classes\action目錄中,CLASSPATH 變量必須包含該路徑。 )。例如,對於Java Web Server來說,Bean和所有Bean用到的類都應該放入classes目錄,或者封裝進jar文件后放入lib目錄,但不應該放到servlets 下。 下面是一個很簡單的例子,它的功能是裝載一個Bean,然后設置/讀取它的message屬性。
現在讓我們在main.jsp文件中調用該Bean:
<html> <head> <title>Using JavaBeans in JSP</title> </head> <body> <center> <h2>Using JavaBeans in JSP</h2> <jsp:useBean id="test" class="action.TestBean" /> <jsp:setProperty name="test" property="message" value="Hello JSP..." /> <p>Got message....</p> <jsp:getProperty name="test" property="message" /> </center> </body> </html>
執行以上文件,輸出如下所示:
Using JavaBeans in JSP Got message.... Hello JSP...