在 处理完使用者的请求之后,在呈现结果页面时有必须必须根据处理的结果来显示不同的画面, 直接在JSP上撰写Java程式码并不是一个好的方法,这会使得页 面上标签与程式码混杂在一起, 当所使用的View层技术为JSP时,您可以运用JSTL来协助页面逻辑的生成,而不是使用于其中直接 撰写Java程式码。
您可以在 http://java.sun.com/products/jsp/jstl/ 中取得JSTL 1.1,将当中的jstl.jar与standard.jar加 入至lib中。 以下示范一个完整的范例,结合Spring 与JSTL 的功能来呈现有条件的页面呈现,首先撰写 HelloController类别:
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,例如:
<?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 时,才会显示欢迎语句:
<%@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>