在 處理完使用者的請求之後,在呈現結果頁面時有必須必須根據處理的結果來顯示不同的畫面,直接在JSP上撰寫Java程式碼並不是一個好的方法,這會使得頁 面上標籤與程式碼混雜在一起,當所使用的View層技術為JSP時,您可以運用JSTL來協助頁面邏輯的生成,而不是使用於其中直接撰寫Java程式碼。
您可以在 http://java.sun.com/products/jsp/jstl/ 中取得JSTL 1.1,將當中的jstl.jar與standard.jar加入至lib中。
以下示範一個完整的範例,結合Spring與JSTL的功能來呈現有條件的頁面呈現,首先撰寫HelloController類別:
- HelloController.java
package onlyfun.caterpillar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
public class HelloController implements Controller {
private String viewPage;
public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res)
throws Exception {
String user = req.getParameter("user");
Integer age = new Integer(
Integer.parseInt(req.getParameter("age")));
java.util.Map model = new java.util.HashMap();
model.put("name", user);
model.put("age", age);
return new ModelAndView(viewPage, model);
}
public void setViewPage(String viewPage) {
this.viewPage = viewPage;
}
}
在這個程式中,只是簡單的將請求參數收集,並設定至一個Model資料物件中,接著在定義檔中, InternalResourceViewResolver的"viewClass"屬性可以設定為 org.springframework.web.servlet.view.JstlView,例如:
- mvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="viewResolver"
class="org.springframework.web.servlet.
→ view.InternalResourceViewResolver">
<property name="viewClass">
<value>
org.springframework.web.servlet.view.JstlView
</value>
</property>
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean name="/hello.do"
class="onlyfun.caterpillar.HelloController">
<property name="viewPage">
<value>hello</value>
</property>
</bean>
</beans>
來寫一個簡單的測試頁面,在這個頁面當中使用JSTL來作頁面邏輯的呈現判斷,設定頁面只有在"age"大於等於18時,才會顯示歡迎語句:
- hello.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSTL And Spring</title>
</head>
<body>
<c:choose>
<c:when test="\${age >= 18}">
<h1>嗨, <c:out value="\${name}"/> !</h1>
</c:when>
<c:otherwise>
<h1>未滿十八歲喔!</h1>
</c:otherwise>
</c:choose>
</body>
</html>