Thymeleaf复合材料部件

时间:2013-06-19 20:44:52

标签: java spring composite-component thymeleaf

有没有办法使用Thymeleaf制作复合组件(如JSF)?我发现了如何将参数发送到可以使用表达式语言检索的片段。但我还没想出如何将标记发送到像JSF一样的片段。

例如,我有几个页面左侧有非常相似的菜单。我希望能够在我的所有页面上使用单个片段,但是传递一些标记以显示在菜单的底部。有些页面必须在底部显示文本,有些页面必须显示文本,例如,它实际上比这更复杂。

<div class="menu" th:frament="menu">
    <a th:text="${menuItem1}"></a>
    <a th:text="${menuItem2}"></a>
    <a th:text="${menuItem3}"></a>
    <markup sent as parameter /> <!-- how do I do this? -->
</div>



<div th:substitueBy="template :: menu" th:with="menuItem1=item1, menuItem2:item2, menuItem3:item3">
    <markup to be sent as parameter /> <!-- this does not work -->
</div>

2 个答案:

答案 0 :(得分:1)

我还想创建具有可交换内容的复合组件。这就是我开发thymeleaf-component-dialect

的原因

使用这种方言,您可以编写如下组件:

使用using (SqlCommand command = new SqlCommand()) { command.Connection = openCon; command.CommandType = CommandType.Text; command.CommandText = "update logRecords set totalHours = DATEDIFF(HOUR,timeIn,timeOut)"; try { openCon.Open(); int recordsAffected = command.ExecuteNonQuery(); MessageBox.Show("Records affected: " + recordsAffected); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { openCon.Close(); GetLogData(); } } 标记创建一个组件(百里香片段)

<tc:content/>

使用组件

<div th:frament="menu">
    <a th:text="${menuItem1}"></a>
    <a th:text="${menuItem2}"></a>
    <a th:text="${menuItem3}"></a>
    <tc:content></tc:content>
</div>

结果将是

<tc:menu>
    <h1>Some Header</h1>
    <p>Lorem ipsum dolor sit amet</p>
</tc:menu>

方言是新的,仍处于阿尔法状态。欢迎提供反馈。

答案 1 :(得分:0)

您可以这样做:

但是您必须将所有菜单容器属性写入您使用它的每个页面。

我真的不喜欢这种方式,但我认为它应该有效:p

<强>模板:

<div th:frament="menu">
    <a th:text="${menuItem1}"></a>
    <a th:text="${menuItem2}"></a>
    <a th:text="${menuItem3}"></a>
</div>

网页:

<div class="menu">
    <div th:include="template :: menu" 
         th:remove="tag" 
         th:with="menuItem1=item1, menuItem2:item2, menuItem3:item3" />
    <more markup/>
</div>