代码之家  ›  专栏  ›  技术社区  ›  SpareMe

弹簧3.2.5瓷砖3未呈现视图

  •  0
  • SpareMe  · 技术社区  · 10 年前

    我已经完成了使用spring23.2.5&瓷砖3

    在我的context-servlet.xml中

    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
      <property name="viewClass">
         <value>
            org.springframework.web.servlet.view.tiles3.TilesView
         </value>
      </property>
    

    在我的tiles-servlet.xml中

    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
         <list>
              <value>/WEB-INF/tiles/common/tiles.xml</value>
              <value>/WEB-INF/tiles/common/base_tiles.xml</value>
                  <value>/WEB-INF/tiles/common/person_tiles.xml</value>
          </list>
    </property>
    </bean> 
    

    在person_tiles.xml中

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
    <tiles-definitions>
    
         <definition name="new_person" extends="base.definition">
            <put-attribute name="body" value="/WEB-INF/xx/xxx/web_person.jsp" />
         </definition>
    </tiles-defnitions>
    

    它抛出以下错误 javax.servlet.ServletException:无法解析名为“project”的servlet中名为“new_person”的视图

    请帮我解决这个问题。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Sébastien Deleuze    10 年前

    讨论这种“行为”的相关问题是 SPR-11491 并且特定于Tiles v3。

    它来自SpringWildcardServletTilesApplicationContext.getResources(String)->URLApplicationResource(字符串,URL)构造函数->super PostfixedApplicationResource(String localePath)构造函数。当定义文件名中有下划线时,最后一个下划线后的字符串将被标识为区域设置。

    这个 Tiles section of Spring 4.0.3 reference documentation 已更新,以使此行为更加明确,并且正在与Tiles开发团队进行讨论,以通过对照locale.getISOLanguageCodes()检查区域设置来修复此问题,从而获得不那么令人惊讶的默认行为。

        2
  •  1
  •   SpareMe    10 年前

    经过大量挖掘后,我发现瓷砖没有正确加载资源。

    在这里,我不确定它是否是一个bug(弹簧3.2.5和瓦片3.0.1):

    但我通过以下方式解决了这个问题

    在我的 瓷砖服务.xml

    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
          <list>
            <value>/WEB-INF/tiles/common/tiles.xml</value>
            <value>/WEB-INF/tiles/common/baseTiles.xml</value><!-- Change the base_tiles to baseTiles.xml or base.xml -->
            <value>/WEB-INF/tiles/common/personTiles.xml</value><!-- Change the person_tiles.xml to personTiles.xml or person.xml-->
          </list>
       </property>
    </bean>
    

    这里,当定义值用下划线分隔时(例如:person_tile或base_tile),它不会加载资源。但是tiles.xml可以访问tiles定义。

    但我试过使用2.2&弹簧3.2.5工作正常。即使我们以person_tile或base_tiles.xml的形式给出。

    在里面 瓷砖服务.xml

    更改base_tiles&person_tile到baseTiles&personTiles,并相应地更改了文件名。

    更改base_tiles&要基于的person_文件&并相应地更改了文件名。

    我希望有人能发现它很有用。