Стойки 2 плитки NoSuchDefinitionException
Я получаю это исключение при использовании распорок 2 с плитками
org.apache.tiles.definition.NoSuchDefinitionException: /index.jsp
//tiles.xml
<tiles-definitions>
<definition name="baseLayout" template="/index.jsp">
<put-attribute name="title" value="/Template" />
<put-attribute name="header" value="/Header.jsp" />
<put-attribute name="menu" value="/Menu.jsp" />
<put-attribute name="body" value="/body.jsp" />
<put-attribute name="footer" value="/Footer.jsp" />
</definition>
<tiles-definitions>
//index.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<tiles:insertAttribute name="header"/>
<tiles:insertAttribute name="footer"/>
</body>
</html>
//web.xml
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.
DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
//struts.xml
<package name="default" namespace="/test" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="login" class="com.medics.action.LoginAction">
<result name="SUCCESS" type="tiles">/index.jsp</result>
</action>
</package>
Я много искал, но ничего не нашел
2 ответа
org.apache.tiles.definition.NoSuchDefinitionException: /index.jsp
Означает, что нет определения плиток, то есть нет определения имени "/index.jsp"
При использовании распорок и плиток... Ваш запрос сводится к стойкам, а затем к плиткам, где плитки составляют вид, поэтому у вас не должно быть никаких определений плиток, называемых "everything.jsp".
Так что просто замени
<result name="SUCCESS" type="tiles">/index.jsp</result>
с
<result name="SUCCESS" type="tiles">baseLayout/result>
Теперь это решено... Я бы переименовал index.jsp, template.jsp (я думаю, что это менее запутанно), почему у вас есть атрибут put с именем "/Template"?
Теперь, чтобы исправить проблему, я рекомендовал изменить целевое значение struts2 на baseLayout, но это, вероятно, не то, что вы имеете в виду, поэтому вы, вероятно, захотите использовать определение baseLayout для новых страниц, поэтому добавьте новое определение:
<definition name="index" extends="baseLayout">
<put-attribute name="title" value="My Title for Index" />
<put-attribute name="body" value="/index.jsp" />
</definition>
Теперь вышеприведенное примет это значение в defaultTemplate и добавит (или, если имя то же самое, переопределить) то, что было в базовом шаблоне, создав страницу для index.jsp, и теперь ваш файл struts.xml должен иметь
<result name="SUCCESS" type="tiles">index</result>
Я столкнулся с этой проблемой сегодня. Хотя это был вопрос давно, я нашел решение, как показано ниже:
<result name="SUCCESS" type="dispatcher">/index.jsp</result>
Просто заменив тип tiles
с dispatcher
работает для меня.