2011-11-03 2 views
0

Я использую Spring roo для создания веб-проекта. После того, как я создал веб MVC с помощью web mvc setup, папка WebApp имеет структуру ниже:Весенний ярлык JSTL не работает

.../webapp/ 
     | 
     |_images 
     |_styles 
     |_WEB-INF 
      | 
      |_classes 
      |_i18n 
      |_spring 
      |_layouts 
      |_tags 
      | |_form 
      | |_menu 
      | |_util 
      | 
      |_views 
      |_web.xml 

И я поставил макеты, изображения, стиль и теги папки в папку Видов (потому что у меня есть другие взгляды на это проект, я не хочу их испортить), и я изменяю связанный путь в views.xml и весь путь тега в файлах * .jspx. Вот как выглядят файлы после изменения Ithe.

Файл структура

.../webapp/ 
     | 
     |_WEB-INF 
      | 
      |_classes 
      |_i18n 
      |_spring 
      | 
      |_views 
      | |_images 
      | |_layouts 
      | |_styles 
      | |_tags 
      |  |_form 
      |  |_menu 
      |  |_util 
      |_web.xml 

веб-mvc.xml

<!-- selects a static view for rendering without the need for an explicit controller --> 
    <mvc:view-controller path="/login"/> 
    <mvc:view-controller path="/logout"/> 
    <mvc:view-controller path="/" view-name="index"/> 
    <mvc:view-controller path="/uncaughtException"/> 
    <mvc:view-controller path="/resourceNotFound"/> 
    <mvc:view-controller path="/dataAccessFailure"/> 

<!-- View resolvers --> 
    <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver" id="resourceBundleViewResolver" p:basename="META-INF/view/wicket-views" p:order="1"/> 

    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver"> 
     <property name="order" value="2"/> 
     <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> 
    </bean> 
    <bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer" id="tilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/views/layouts/layouts.xml</value> 
       <value>/WEB-INF/views/views.xml</value> 
      </list> 
     </property> 
    </bean> 

views.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE tiles-definitions PUBLIC 
    "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" 
    "http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> 

<tiles-definitions> 

    <definition name="index" extends="default"> 
    <put-attribute name="body" value="/WEB-INF/views/index.jspx" /> 
    </definition> 

    <definition name="dataAccessFailure" extends="public"> 
    <put-attribute name="body" value="/WEB-INF/views/dataAccessFailure.jspx" /> 
    </definition> 

    <definition name="resourceNotFound" extends="public"> 
    <put-attribute name="body" value="/WEB-INF/views/resourceNotFound.jspx" /> 
    </definition> 

    <definition name="uncaughtException" extends="public"> 
    <put-attribute name="body" value="/WEB-INF/views/uncaughtException.jspx" /> 
    </definition> 

</tiles-definitions> 

layouts.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE tiles-definitions PUBLIC 
     "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" 
     "http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> 

<tiles-definitions> 

    <definition name="default" template="/WEB-INF/views/layouts/default.jspx"> 
    <put-attribute name="header" value="/WEB-INF/views/header.jspx" /> 
    <put-attribute name="menu" value="/WEB-INF/views/menu.jspx" /> 
    <put-attribute name="footer" value="/WEB-INF/views/footer.jspx" /> 
    </definition> 

    <definition name="public" template="/WEB-INF/views/layouts/default.jspx"> 
    <put-attribute name="header" value="/WEB-INF/views/header.jspx" /> 
    <put-attribute name="footer" value="/WEB-INF/views/footer.jspx" /> 
    </definition> 

</tiles-definitions> 

default.jspx

<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/views/tags/util" > 

    <jsp:output doctype-root-element="HTML" doctype-system="about:legacy-compat" /> 

    <jsp:directive.page contentType="text/html;charset=UTF-8" /> 
    <jsp:directive.page pageEncoding="UTF-8" /> 

    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <meta http-equiv="X-UA-Compatible" content="IE=8" />  

     <util:load-scripts /> 

     <spring:message code="application_name" var="app_name" htmlEscape="false"/> 
     <title><spring:message code="welcome_h3" arguments="${app_name}" /></title> 
    </head> 

    <body class="tundra spring"> 
     <div id="wrapper"> 
      <tiles:insertAttribute name="header" ignore="true" /> 
      <tiles:insertAttribute name="menu" ignore="true" /> 
      <div id="main"> 
       <tiles:insertAttribute name="body"/> 
       <tiles:insertAttribute name="footer" ignore="true"/> 
      </div> 
     </div> 
    </body> 
</html> 

index.jspx

<div xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/views/tags/util" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> 
    <jsp:directive.page contentType="text/html;charset=UTF-8" /> 
    <jsp:output omit-xml-declaration="yes" /> 
    <spring:message var="app_name" code="application_name" htmlEscape="false" /> 
    <spring:message var="title" code="welcome_titlepane" arguments="${app_name}" htmlEscape="false" /> 
    <util:panel id="title" title="${title}"> 
    <h3> 
     <spring:message code="welcome_h3" arguments="${app_name}" /> 
    </h3> 
    <p> 
     <spring:message code="welcome_text" /> 
    </p> 
    </util:panel> 
</div> 

Я просто игнорировать другие JSPX файл, как заголовок, колонтитул и так далее, потому что я только изменил одну часть что файлы «xmlns:util="urn:jsptagdir:/WEB-INF/tags/util"», и я изменил его на «xmlns:util="urn:jsptagdir:/WEB-INF/views/tags/util"».

И теперь я запускаю mvn clean install и mvn clean tomcat:run, проект может быть построен и развернут на сервере tomcat без каких-либо ошибок. И когда я посещаю домашнюю страницу в браузере, я всегда получаю следующую ошибку.

Nov 3, 2011 3:57:13 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet CrazyPlatform threw exception 
org.apache.jasper.JasperException: /WEB-INF/views/layouts/default.jspx(1,239) Could not add one or more tag libraries. 
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) 
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) 
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88) 
    at org.apache.jasper.compiler.JspDocumentParser.parse(JspDocumentParser.java:214) 
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:239) 
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) 
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:347) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
    at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241) 
    at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222) 
    at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44) 
    at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:690) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:644) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:627) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321) 
    at org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:680) 

Я использую весь свой день для решения Google, и я ничего не получаю. И если я сохраню структуру по умолчанию, созданную весной roo, все в порядке. Поэтому я уверен, что я должен что-то сделать неправильно, когда меняю конфигурационные файлы, но я просто не могу его найти.

Есть ли кто-нибудь, кто может мне помочь?

Большое вам спасибо!

ответ

0

Не боритесь за свои инструменты. Исходная организация не полностью специфична для Roo, но она определяется веб-стандартами Java.

  1. Все, что находится внутри WEB-INF, напрямую не связано с общественностью, изображения и стили должны оставаться на улице.
  2. Файлы тегов также имеют определенное местоположение в веб-стандартах Java.
  3. Макеты обрабатываются Apache Tiles, поэтому я не уверен, что их местоположение ограничено.
+1

Основываясь на том, что madth3 сказал, что я сделал дальнейший поиск и эксперимент, и я нашел места для изображений, стилей и макета, потому что, если бы я переместил папку тегов в папку WEB-INF и оставил остальное под WEB -INF/views, проект работает хорошо. Позже я сделал еще один поиск и нашел причину, по которой я не могу изменить расположение папки тегов, потому что весенний рой использует «urn: jsptagdir» для определения url taglib. Поэтому, если вы хотите изменить расположение тегов, просто удалите «urn: jsptagdir» и вместо этого используйте простой URI. Причина приведена здесь (http://download.oracle.com/javaee/1.4/tutorial/doc/JSPX3.html). – charles

Смежные вопросы