Tapestry 5 的佈局組件允許在模板中定義可復用的頁面結構,並透過參數實現標題、關鍵字、描述等動態替換。本文示範如何在佈局類中聲明參數並在使用頁面傳值。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:t="https://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
<meta name="keywords" content="${ks}"/>
<meta name="description" content="${desc}"/>
<title>${title}</title>
</head>
<body>
<t:body/> <!-- 內容插入點 -->
</body>
</html>
使用 @Parameter 聲明參數,@Property 暴露為唯讀屬性供模板讀取:
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BindingConstants;
public class Layout {
@Parameter(defaultPrefix = BindingConstants.LITERAL, name = "title", required = true)
@Property(write = false)
private String title;
@Parameter(defaultPrefix = BindingConstants.LITERAL, name = "ks")
@Property(write = false)
private String keywords;
@Parameter(defaultPrefix = BindingConstants.LITERAL, name = "desc")
@Property(write = false)
private String description;
}
defaultPrefix = BindingConstants.LITERAL:預期直接傳入字面值而非表達式。required = true:強制調用方必須提供該參數。@Property(write = false):生成 getter 供模板讀取,不生成 setter。<div t:type="Layout" xmlns:t="https://tapestry.apache.org/schema/tapestry_5_0_0.xsd"
title="這裡寫你的標題" ks="關鍵字" desc="頁面描述">
XXX <!-- 頁面具體內容 -->
</div>
重啟應用服務器後訪問頁面,瀏覽器標題欄將顯示傳入的「這裡寫你的標題」,meta 標籤也會相應更新。
title="user.name"),需移除 LITERAL 前綴。@Parameter(value = "預設標題")。掌握參數綁定機制,能讓 Tapestry 5 的佈局組件真正實現「寫一次,到處復用,動態配置」。