为什么Tiles通配符定义名称不能接受斜杠(/)字符

时间:2011-06-29 13:30:02

标签: tiles2

正如我们所看到的Tiles文档所说 https://tiles.apache.org/framework/tutorial/advanced/wildcard.html 我们可以定义一个通配符来接受任意名称。但如果名称包含“/”,例如“c4 / login”。 Tiles会抛出异常

org.apache.tiles.definition.NoSuchDefinitionException: c4/login
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:625)
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321)

我的定义如下:

<definition name="*" template="/WEB-INF/tiles/basicLayout.jsp">
  <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
  <put-attribute name="content" value="/WEB-INF/pages/{1}.jsp" />
  <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
</definition>

如果我将定义更改为下面的示例,则接受带有斜杠的名称。

<definition name="c4/login" template="/WEB-INF/tiles/basicLayout.jsp">
  <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
  <put-attribute name="content" value="/WEB-INF/pages/c4/login.jsp" />
  <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
</definition>

请指教。非常感谢。

2 个答案:

答案 0 :(得分:2)

我想我找到了一个更通用的解决方法:使用**作为通配符:

<definition name="**" template="/WEB-INF/tiles/basicLayout.jsp">
  <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
  <put-attribute name="content" value="/WEB-INF/pages/{1}.jsp" />
  <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
</definition>

答案 1 :(得分:1)

我有一个解决方案,使用下面的修订定义

<definition name="*/*" template="/WEB-INF/tiles/basicLayout.jsp">
  <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
  <put-attribute name="content" value="/WEB-INF/pages/{1}/{2}.jsp" />
  <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
</definition>

希望这对你有用。