Tiles ViewPreparer, определенный в Spring, не найден Tiles - PullRequest
2 голосов
/ 04 марта 2011

РЕДАКТИРОВАТЬ: Я полагаю, что это свойство SpringBeanPreparerFactory элемента tileConfigurer отвечает за то, чтобы убедиться, что средства подготовки доступны для плиток ... но похоже, что оно может не работать.По умолчанию для tileConfigurer установлено значение «BasicPreparerFactory», и я вижу ссылку на это в журналах сервера. Я думаю, что, возможно, каким-то образом это свойство установлено неправильно, и вместо него используется значение по умолчанию BasicPreparerFactor.

Я в полном недоумении с этим ... ЛЮБЫЕ мысли или советы будут оценены.

Я просто пытаюсь использовать Tiles ViewPreparer, который определен в моей конфигурации Spring ... этоЭто!Но по какой-либо причине метод execute для моего ViewPreparer просто никогда не вызывается.ViewPreparer создается Spring, и моя плитка обрабатывается, но средство подготовки никогда не выполняется.Как будто есть неработающая связь между Tiles и Spring, которая должна быть там ... Я говорю, что я использую «testPreparer» в файле tile.xml, который является компонентом, определенным в «applicationContext.xml», но плитки ведут себя как яне определил подготовитель вообще. Вот хорошее описание того, что я по сути пытаюсь сделать.

/ WEB-INF /iles.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>

1 Ответ

0 голосов
/ 04 марта 2011

ОК, проблема решена. Оказывается, это потому, что в моем файле web.xml была следующая запись:

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

По какой-то причине это существенно нарушало то, что я определил в applicationContext.xml. Мне нужно было провести дополнительное расследование, чтобы выяснить, в чем именно заключался конфликт, но само собой разумеется, что удаление этой записи решило проблему.

Извините, я потратил последние 2 дня, пытаясь понять это, и я думаю, что написание моей проблемы здесь помогло мне обдумать это. О, хорошо, по крайней мере, это будет задокументировано здесь, на S.O. если кто-то еще сталкивается с той же проблемой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...