Во-первых, я хотел бы предложить поместить ваши действия Struts в пакет, называемый просто Struts, у меня было гораздо меньше проблем с конфигурацией при использовании архитектуры плагинов со стандартными соглашениями.Переместите ваши действия в пакет вроде:
uk.co.ratedpeople.struts
вместо
uk.co.ratedpeople.tp;
Чем меньше стандартная конфигурация, тем лучше для вас.Это также устраняет необходимость в этом:
<constant name="struts.convention.package.locators" value="tp"/>
Во-вторых, часть вашей проблемы связана с вашей конфигурацией XML:
<struts>
<constant name="struts.devMode" value="true" />
<!-- RESTful plugin setup -->
<constant name="struts.mapper.class" value="rest" />
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="tp"/>
<package name="tradesman" namespace="/beta/tradesman" extends="default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
</package>
Вместо этого попробуйте что-то подобное (если вы переместили свои действия, как было предложено ранее):
<struts>
<constant name="struts.devMode" value="true" />
<!-- RESTful plugin setup -->
<constant name="struts.mapper.class" value="rest" />
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="tradesman"/>
<package name="tradesman" namespace="/beta/tradesman" extends="rest-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
</package>
</struts>
Обратите внимание на константу name = "struts.convention.default.parent.package" value = "tradesman", которая ссылается на пакет под ним, который определяетваш тип результатов и расширяет остальные по умолчанию.Это должно устранить ваши ошибки определения результата плиток.
Я также столкнулся с проблемами при использовании фильтра распорок, который есть в вашем файле web.xml, я бы изменил с:
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
на:
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>