ITEEDU

JSP/Servlet: 使用 EL 存取属性

在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