大可制作:QQ群:31564239(asp|jsp|php|mysql)

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:useBean id="userBean" 
class="onlyfun.caterpillar.UserBean"/>
<jsp:setProperty name="userBean"
property="name"
value="Justin"/>
<jsp:setProperty name="userBean"
property="Id"
value="B83503124"/>

Hello, ${ userBean.name }!! Your id is ${ 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