在JSP网页中,您可以设定属性或JavaBean的作用范围为page、request、session、 application等,之后就可以藉由属性或JavaBean的参考名称,并指定作用范围来存取属性或JavaBean,您可以使用 getAttribute()方法来取得属性,这必须在Scriptlet中使用,而使用存取JavaBean的标签<jsp: getProperty>可以避免使用Scriptlet,然而其限制是只能取得简单的资料,而不能取得如数组之内的元素数据。 可以使用EL指定属性或JavaBean的参考名称来取得属性或JavaBean的值,先举一个简单的例子,首先撰写一个只有Scriptlet的JSP网页:
attribute.jsp<% request.setAttribute("username", "Justin"); pageContext.forward("elTest.jsp"); %>
如果您连至上面的网页,它会在request中设定"username"属性,然后马上forward至elTest.jsp,而elTest.jsp中只使用HTML标签与EL,如下所示:
elTest.jsp<html> <body> Hello, <b<${ username }!! </body> </html>
所得到的结果网页如下:
<html> <body> Hello, <b>Justin!!</body> </html>
在这个例子中,您也大致看到Model 1的一个例子,您可以让某些JSP网页实现程序逻辑,而在某些JSP网页中使用EL、JavaBean或是标签等,实现程序逻辑与视图分开的机制。 在EL中,可以指定属性或JavaBean的作用范围来存取它们,这必须使用到EL隐含对象,这将在之后介绍,如果不指定作用范围的话,预设是page、 request、session、application的顺序来寻找EL中所指定的属性。 如果存入的属性对象具有getXXX()之类的方法,则可以使用下面的方式来取得相对应名称的属性:
Hello, ${ user.name } !! Your id is ${ user.id }.
例如我们先撰写一个UserBean类别:
UserBean.java package onlyfun.caterpillar; public class UserBean { private String name; private String id; public void setName(String name) { this.name = name; } public void setId(String id) { this.id = id; } public String getName() { return name; } public String getId() { return id; } }
使用下面这个JSP网页来测试它:
elTest.jsp<jsp:useBeanid="userBean" class="onlyfun.caterpillar.UserBean"/> <jsp:setPropertyname="userBean" property="name" value="Justin"/> <jsp:setPropertyname="userBean" property="Id" value="B83503124"/> Hello,${userBean.name}!!Youridis${userBean.ID}.
当然,就上面这个例子而言,也可以简单的使用<jsp:getProperty>来取得JavaBean的属性值,然而如果JavaBean 返回的是一个数组,该如何取得数组当中的某个元素值呢?使用EL的话,您可以藉由[]运算子来指定所要存取的对象,例如根据索引值来取得返回数组的某个元 素,为了测试,先简单的撰写下面这个测试用的类别:
ArrayTestBean.java package onlyfun.caterpillar; public class ArrayTestBean { public String[] getTestArray() { String[] test = {"Justin", "momor", "Beckyday"}; return test; } }
可以藉由下面这个JSP网页来进行测试:
elTest.jsp<jsp:useBean id="arrayTestBean" class="onlyfun.caterpillar.ArrayTestBean"/> test[0] = ${ arrayTestBean.testArray[0] } test[1] = ${ arrayTestBean.testArray[1] } test[2] = ${ arrayTestBean.testArray[2] }
最后传回的结果是:
test[0] = Justin
test[1] = momor
test[2] = Beckyday