2011-12-30 159 views
0

我試圖讓我的春天的應用程序工作,跟着一個人發佈了一個早期的春天版本的例子。我的例子一直有很多問題,所以我沒有發佈鏈接,以免別人誤入歧途。通過解決問題,我能夠達到事情正在發揮作用的地步。有些。我一直無法弄清以下兩件事:JSTL問題(春季3)

  1. $(message)不打印消息,它是一個String類型的bean。
  2. <c:out value="${message}"打印郵件,但只有當我添加到jsp的<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>。我會假設將jtslview類添加到解析器就足夠了。不是。這裏有什麼問題?

設置

Eclipse IDE for Java EE Developers 1.4.1.20110909-1818 epp.package.jee 
    Tomcat 7 
    Spring 3 distribution (all jars in /lib) 
    lib/jstl-1.2.jar 

JSP問題

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Message View</title> 
</head> 
<body> 
    $(message) 
    <br> 
    message=$(message); 
    <br> 
    message=<c:out value="${message}" /> 
</body> 
</html> 

此打印以下。消息「bean」顯然傳遞給頁面。

$(message) 
message=$(message); 
message=Hello World from Spring MVC! 

的web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
     xmlns="http://java.sun.com/xml/ns/javaee"  
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
     id="WebApp_ID" 
     version="2.5">  

     <display-name>Spring3MVC</display-name>  
     <welcome-file-list>   
      <welcome-file>index.jsp</welcome-file>  
     </welcome-file-list>  

     <servlet>   
      <servlet-name>spring</servlet-name>   
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <load-on-startup>1</load-on-startup>  
     </servlet>  

     <servlet-mapping>   
      <servlet-name>spring</servlet-name>   
      <url-pattern>*.html</url-pattern>  
     </servlet-mapping> 

</web-app> 

彈簧servlet.xml中

<?xml version="1.0" encoding="UTF-8"?> 

    <beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

    <context:component-scan base-package="com.helloworldexample.controllers" />  

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

控制器(以防萬一)

package com.helloworldexample.controllers; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 


@Controller 
public class MesssageController { 


@RequestMapping("/hello") 
public ModelAndView handleHello() { 
    String message="Hello World from Spring MVC!"; 

    return new ModelAndView("messageView", "message", message); 

} 

@RequestMapping("/welcome.html") 
public ModelAndView handleWelcome() { 
    String message="Welcome in Spring MVC!"; 

    return new ModelAndView("messageView", "message", message); 

} 

} 

回答

3

爲JSP表達式語言的語法是${some expression}。不是$(some expression)

每次使用JSP標記時,其標記庫必須在JSP中聲明。您將Spring配置爲使用JstlView的事實與使用<c>標記的可能性沒有任何關係。它只是配置Spring在分派到視圖之前執行適當的操作。

<c:out>應始終用於呈現字符串,除非您確定該字符串不包含任何必須通過HTML轉義的字符。不使用它會打開攻擊之門,用戶可以提交包含</html>的文本或一段JavaScript代碼,這些代碼會危害您的網站。

閱讀有關servlet和JSP的官方教程:http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html

+0

大括號工作。關於標籤庫定義的點(不知道示例作者如何在沒有它的情況下讓他的東西工作)。感謝c:out上的提示。真正的專家! – jacekn 2011-12-30 23:14:04

1

也許你需要到你的導入tagslib

<%@ taglib prefix="c" uri="htttp://java.sun.com/jsp/jstl/core" %> 
    <%@ taglib prefix="fmt" uri="htttp://java.sun.com/jsp/jstl/fmt" %> 

改變

<%@ taglib prefix="c" uri="htttp://java.sun.com/jstl/core" %> 
    <%@ taglib prefix="fmt" uri="htttp://java.sun.com/jstl/fmt" %>