Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改Apache Tiles中tile求值的顺序?_Java_Jsp_Tiles_Apache Tiles - Fatal编程技术网

Java 如何更改Apache Tiles中tile求值的顺序?

Java 如何更改Apache Tiles中tile求值的顺序?,java,jsp,tiles,apache-tiles,Java,Jsp,Tiles,Apache Tiles,我有一个问题,嵌套模板在父模板之前进行求值。由于排序问题,这会导致坚持嵌套的标记库出现问题 template.jsp <%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> <%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <%@taglib uri="http://

我有一个问题,嵌套模板在父模板之前进行求值。由于排序问题,这会导致坚持嵌套的标记库出现问题

template.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@taglib uri="http://taglibs.com/tags" prefix="s"%>
<%System.out.println("evaluating template.jsp");%>
<s:outer>
    <tiles:insertAttribute name="content" />
</s:outer>

content.jsp
页面失败,因为
内部
标记必须位于
外部
标记内。如何让Tiles在对
template.jsp
求值后对
content.jsp
求值?

我可能错了,但我认为Tiles需要解析整个jsp,这意味着不能按照它的布局来做。当前布局来自一个目标JSP,该JSP随后在内部使用一个模板。我们可以使用tiles定义来指定模板作为填充内容的目标。我认为这种方法可以让您更有效地使用tiles继承,并且可以解决这个问题,因为“模板”将首先呈现,而不是第二次呈现

例如: tiles.xml

<tiles-definitions>
    <definition name="myTemplate" template="/WEB-INF/jsf/template.jsp">
         <put-attribute name="content" value="" />
    </definition>
    <definition name="content" extends="myTemplate">
         <put-attribute name="content" value="content.jsp" />
    </definition>
</tiles-definitions>

现在您必须指定一个tiles定义作为结果类型。。。如果您使用的是struts2,我会告诉您,但所有框架都可能不是您的

您的模板jsp将保持不变。 您的内容jsp将被重写如下:

<%@taglib uri="http://taglibs.com/tags" prefix="s"%>
<%System.out.println("evaluating content.jsp");%>
<s:inner />


注意,现在不需要在页面中混合任何平铺逻辑。内容就是这样。您会注意到tiles.xml文件比我实际需要的更复杂,但我想说明的是,在我们的示例中,我们只有一个“put属性”,但在更复杂的页面中,您可以有许多,因此“myTemplate”将生成一个页面,其中不仅包含内容,还包含页眉、页脚和边栏,甚至可能包含页眉,这样您就可以更改页面上的脚本和CSS,然后您只需按照给定的示例进行扩展,然后只更改您想要的部分(通常只是内容),进一步扩展该定义。。。基本布局->安全布局扩展基本布局,但可能会更改标题以包含锁定图标->查看用户\u在\u安全布局扩展安全布局中更改查看用户功能的内容。

我可能错了,但我认为Tiles需要解析整个JSP,这意味着您不能按其布局方式进行操作。当前布局来自一个目标JSP,该JSP随后在内部使用一个模板。我们可以使用tiles定义来指定模板作为填充内容的目标。我认为这种方法可以让您更有效地使用tiles继承,并且可以解决这个问题,因为“模板”将首先呈现,而不是第二次呈现

例如: tiles.xml

<tiles-definitions>
    <definition name="myTemplate" template="/WEB-INF/jsf/template.jsp">
         <put-attribute name="content" value="" />
    </definition>
    <definition name="content" extends="myTemplate">
         <put-attribute name="content" value="content.jsp" />
    </definition>
</tiles-definitions>

现在您必须指定一个tiles定义作为结果类型。。。如果您使用的是struts2,我会告诉您,但所有框架都可能不是您的

您的模板jsp将保持不变。 您的内容jsp将被重写如下:

<%@taglib uri="http://taglibs.com/tags" prefix="s"%>
<%System.out.println("evaluating content.jsp");%>
<s:inner />


注意,现在不需要在页面中混合任何平铺逻辑。内容就是这样。您会注意到tiles.xml文件比我实际需要的更复杂,但我想说明的是,在我们的示例中,我们只有一个“put属性”,但在更复杂的页面中,您可以有许多,因此“myTemplate”将生成一个页面,其中不仅包含内容,还包含页眉、页脚和边栏,甚至可能包含页眉,这样您就可以更改页面上的脚本和CSS,然后您只需按照给定的示例进行扩展,然后只更改您想要的部分(通常只是内容),进一步扩展该定义。。。基本布局->安全布局扩展基本布局,但可能会更改标题以包含锁定图标->查看用户\u在\u安全布局扩展安全布局中更改查看用户功能的内容。

我使用Tiles遇到的问题是,我希望所有页面内容都在一个JSP页面内-html标题内容,页面特定css,菜单和内容。看来瓷砖不会像我想的那样工作。谢谢你的输入!我在Tiles中遇到的问题是,我希望所有页面内容都在一个JSP页面中—html标题内容、特定于页面的css、菜单和内容。看来瓷砖不会像我想的那样工作。谢谢你的输入!