有没有办法使用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>
答案 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>