在Spring中定义的瓷砖ViewPrepare没有被瓷砖找到

问题描述:

编辑:我相信它是tilesConfigurer的SpringBeanPreparerFactory属性,它负责确保编写者可用于瓷砖......但它看起来可能不工作。 tilesConfigurer的默认值是“BasicPreparerFactory”,并且我在服务器日志中看到了对此的引用,我想可能是某种方式该属性没有被正确设置,而是使用默认的BasicPreparerFactor。在Spring中定义的瓷砖ViewPrepare没有被瓷砖找到

我完全丧失了这一个...任何想法或建议,将不胜感激。

我只是试图使用在我的Spring配置中定义的Tiles ViewPreparer ...就是这样!但无论出于何种原因,我的ViewPreparer的“执行”方法都不会被调用。 ViewPreparer IS由Spring构建,我的tile正在渲染,但编写者从不执行。就像Tiles和Spring之间存在一个断开的连接应该在那里......我说我在tiles.xml中使用了“testPreparer”,这是在“applicationContext.xml”中定义的一个bean,但是tile的行为就像我一样根本没有定义准备者。 Here's a good description of what I'm essentially trying to do.

/WEB-INF/tiles.xml:

<tiles-definitions> 

    <definition name="test.tile" template="testtile.jsp" preparer="testPreparer"> 
    </definition> 

</tiles-definitions> 

的applicationContext.xml

<bean id="tilesConfigurer" 
    class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
     <value>/WEB-INF/tiles.xml</value> 
     </list> 
    </property> 
    <property name="preparerFactoryClass" 
     value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory" /> 
    </bean> 

    <bean id="testPreparer" class="TestPreparer"></bean> 

TestPreparer.java

import org.apache.tiles.AttributeContext; 
import org.apache.tiles.context.TilesRequestContext; 
import org.apache.tiles.preparer.PreparerException; 
import org.apache.tiles.preparer.ViewPreparer; 


public class TestPreparer implements ViewPreparer { 

    public void execute(TilesRequestContext arg0, AttributeContext arg1) 
      throws PreparerException { 
     System.out.println("I executed"); 

    } 

} 

struts.xml中:

<package name="apps-default" extends="struts-default" 
    abstract="true"> 
    <result-types> 
     <result-type name="tiles" 
     class="org.apache.struts2.views.tiles.TilesResult" /> 
     </result-types> 
    <interceptors> 
     ... 
    </interceptors> 

    <default-interceptor-ref name="defaultAppStack"/> 

    <package name="testPackage" extends="apps-default" namespace="/test"> 
    <action name="create" class="testAction" method="create"> 
     <result type="tiles">test.tile</result> 
    </action> 
    </package> 

好的,问题解决了。事实证明,那是因为我在我的web.xml中有以下条目:

<listener> 
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> 
</listener> 

无论出于何种原因,基本上打破/与我在applicationContext.xml中定义的干扰。我不得不做更多的调查来弄清究竟是什么冲突,但不用说删除那个条目解决了这个问题。

对不起,我花了最近2天试图弄清楚这一点,我想在这里写我的问题帮助我考虑了一下。哦,至少,这将在S.O.上记录下来。万一每个人都遇到同样的问题!