Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSP和JSTL作为视图的SpringMVC基本示例不起作用_Jsp_Spring Mvc_Jstl - Fatal编程技术网

使用JSP和JSTL作为视图的SpringMVC基本示例不起作用

使用JSP和JSTL作为视图的SpringMVC基本示例不起作用,jsp,spring-mvc,jstl,Jsp,Spring Mvc,Jstl,和许多新人一样,我很难克服第一个障碍。在我的例子中,当前的障碍似乎与JSTL fmt taglib没有正确格式化我的日期有关,或者fmt标记的value属性正在传递一个字符串文本。我有一个简单的Maven项目,我用它来解决我知识中的难题。以下代码片段来自我的WelcomeController、web-servlet.xml、web.xml和welcome.jsp WelcomeController.java @Controller @RequestMapping(value="/

和许多新人一样,我很难克服第一个障碍。在我的例子中,当前的障碍似乎与JSTL fmt taglib没有正确格式化我的日期有关,或者fmt标记的value属性正在传递一个字符串文本。我有一个简单的Maven项目,我用它来解决我知识中的难题。以下代码片段来自我的WelcomeController、web-servlet.xml、web.xml和welcome.jsp

WelcomeController.java

    @Controller
    @RequestMapping(value="/")
    class WelcomeController {  

        @RequestMapping(method=RequestMethod.GET) 
        public String welcome(Model model) {
            Date today = new Date();
            System.out.println("Controller being called");
            model.addAttribute("today", today);
            System.out.println(model.containsAttribute("today"));
            return "welcome";
       }
    }
web-servlet.xml

   <?xml version="1.0" encoding="UTF-8"?>
   <beans> <!-- bean namespaces ommitted for space sake -->

        <context:component-scan base-package="org.opel.eros.web"/>

        <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

        <context:property-placeholder location="classpath:META-INF/properties/web-config.properties"/>

        <mvc:annotation-driven/>

        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="${config.prefix}"/>
            <property name="suffix" value="${config.suffix}"></property>
        </bean>

web.xml

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

       <servlet-mapping>
           <servlet-name>eros</servlet-name>
           <url-pattern>/</url-pattern>
       </servlet-mapping>
   </web-app>

爱神
org.springframework.web.servlet.DispatcherServlet
1.
爱神
/
最后是welcome.jsp

   <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
   <html>
   <head></head>
   <body>
       <fmt:formatDate value="${today}" pattern="yyyy-MM-dd"/>
   </body>
   </html>

我知道这不会变得简单,但是当我输入url
http://localhost:9990/XYZ/
,这是一个例外:PWC6338:无法为bean java.util.Date的属性值转换“${today}”

在我看来,这似乎是一个错误,其中formattedate被传递字符串文本“${today}”,这显然会引发异常。我用于帮助的示例(来自Spring Receipes:问题解决方案方法)指出,要访问模型属性,您需要使用上面fmt标记中指定的语法


基本上,我正在寻找一个解决方案和发生这种情况的原因(我确实意识到这可能是我这方面非常简单和愚蠢的事情=])。非常感谢您提前提供的帮助。

我猜您使用的JSP版本和JSTL版本不匹配。下面是一篇文章,描述如何根据您的设置使用JSTL:

web.xml中的
标记没有说明应用程序的版本,因此这是我要检查的第一件事。您可以(如果您没有在web.xml中明确指定,则每个servlet版本都应该有其默认版本),或者通过将JSP更改为以下内容,执行一个快速的脏测试以查看您是否正在使用JSP 2:

<html>
   <head></head>
   <body>
       ${today}
   </body>
</html>

${today}

如果您看到日期值,那么您就在jsp2上;如果您看到字符串${today},那么您就在JSP1上(JSTL版本错误)

问题似乎在web.xml内部。xml和相应的项目结构是由Spring源代码工具使用maven archtype webapp自动生成的。自动生成的web.xml不指定任何命名空间防御;而是指定类似以下内容的DOCTYPE:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >

制作了一个Servlet版本的3.0,这导致了我的一些困惑,可能会让其他人感到困惑。非常感谢Bogdan的帮助。

感谢您的回复,我会查看这些。感谢againI最终尝试了这一点,以下是打印出来的(来自coderanch示例)Servlet版本:3.0 JSP verison:2.1 Java版本:1.7.0_07${today}${2+2},在我的pom.xml中,我包含了依赖项JSTL 1.2,但我仍然看到了字符串,这可能是我使用的容器的问题吗(哪一个是Jetty btw)?@OpelMac:expression${2+2}无论JSTL版本如何,都应该计算为4,因为您使用的是JSP 2.1。奇怪…!更改servlet容器可能是个好主意,请尝试使用类似Tomcat 7的工具。如果它在Tomcat上工作,可能会开始使用应用程序的不同设置,例如在web.xml中显式设置servlet版本(从3.0开始,如果需要,请转到2.5、2.4,看看是否有任何更改),也可以转到Java 1.6运行时或其他Jetty版本…因此我发现了错误[当我终于有时间时]。我将发布我的过程作为问题的答案,并给您一个答案。谢谢
-application.getMajorVersion(); and
-application.getMinorVersion();