Pergunta

Já passei por outro post sobre renderização da visualização usando spring3.2.5 e tiles3

no meu contexto-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>

No meu 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> 

Em 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>

Ele lança abaixo o erro javax.servlet.Servletexception:Não foi possível resolver a visualização com o nome 'new_person' no servlet com o nome 'project'

por favor me ajude a resolver o problema.

Foi útil?

Solução

A questão relacionada à discussão desse "comportamento" é SPR-11491 e é específico para Tiles v3.

Ele vem do construtor SpringWildcardServletTilesApplicationContext.getResources(String) -> URLApplicationResource(String, URL) -> super construtor PostfixedApplicationResource(String localePath).Quando há um sublinhado nos nomes de arquivos de definição, a sequência após o último sublinhado é identificada como o código do idioma.

O Seção de blocos da documentação de referência do Spring 4.0.3 foi atualizado para tornar esse comportamento mais explícito, e há discussões em andamento com a equipe de desenvolvimento do Tiles para corrigir isso, verificando o local em Locale.getISOLanguageCodes() para obter um comportamento padrão menos surpreendente.

Outras dicas

Depois de muita pesquisa, descobri que os blocos não estão carregando os recursos corretamente.

Aqui não tenho certeza se é um bug (spring 3.2.5 e blocos 3.0.1) ou não:

Mas resolvi esse problema seguindo

aqui no meu azulejos-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/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>

Aqui, quando temos o valor das definições separado por sublinhado (ex:person_tiles ou base_tiles) não está carregando o recurso. No entanto, tiles.xml as definições de blocos estão acessíveis.

Mas tentei com os blocos 2.2 e Spring 3.2.5 e funcionou corretamente.Mesmo que forneçamos como person_tiles ou base_tiles.xml.

Em azulejos-servlet.xml

Altere base_tiles & person_tiles para baseTiles & personTiles e altere os nomes dos arquivos de acordo.

OU

Altere base_tiles & person_tiles para base & person e altere os nomes dos arquivos de acordo.

Espero que alguém possa considerá-lo útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top