静态结构,动态行为 - 这些适用吗?

时间:2012-10-31 10:33:34

标签: tapestry

我知道这方面有一些问题,但我认为他们不回答我的问题。

我想允许我的应用程序的管理员用户更改特定页面上的组件及其顺序。所以例如:

页面A将包含组件1,2,3 页面B将包含组件4,3,2

我没有尝试在页面加载之后修改它,但之前(例如可以从数据库中读取页面所需的结构)。

这是否违反了Tapestry的静态结构?是否有可能实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用Blocks和Delegate组件来实现此目的。

显然你需要研究get...Block方法的逻辑,但你应该能够解决问题。

在这种情况下,静态结构指的是您的标记需要声明可能呈现的所有嵌入式组件。然后,您可以使用逻辑和其他组件来决定以哪种顺序呈现的内容。

的java:

public class MyPage
{
    @Inject
    public Block block1;
    @Inject
    public Block block2;
    @Inject
    public Block block3;
    @Inject
    public Block block4;

    public Block getFirstBlock()
    {
        return caseA ? block1 : block4;
    }

    public Block getSecondBlock()
    {
        return caseA ? block2 : block3;
    }

    public Block getThirdBlock()
    {
        return caseA ? block3 : block2;
    }
}

TML:

<...>
    <t:block t:id="block1"><t:component1 /></t:block>
    <t:block t:id="block2"><t:component2 /></t:block>
    <t:block t:id="block3"><t:component3 /></t:block>
    <t:block t:id="block4"><t:component4 /></t:block>

    <t:delegate to="firstBlock" />
    <t:delegate to="secondBlock" />
    <t:delegate to="thirdBlock" />
</...>