0

这是我试图解决的一个更大问题的一部分,但是关于如何做到这一点的一些逻辑想法将帮助我解决我需要的其余部分。

我想知道是否可以让用户从组件列表中进行选择,然后在页面上显示该组件?

例如,如果我有 3 个链接:

[Component 1]
[Component 2]
[Component 3]

如果用户选择“组件 1”,我希望页面刷新并在页面上显示该组件。我想避免为每个组件创建单独的页面。我遇到的问题是,如果我在模板(.tml)中使用这样的东西:

<t:tools.HelloComponent> </t:tools.HelloComponent> 

然后硬编码总是显示一个组件。我无法在运行时更改 .tml 文件,因为这会影响所有用户。

我不确定最好的逻辑是什么,所以我只是在寻找一些一般性的指导。

4

1 回答 1

2

听起来像是你想要使用的。

块基本上是模板中的一块标记,它不会自动呈现,但可以在 Java 中引用并按需呈现。

因此,在您的情况下,您可能希望将每个组件放在页面模板内自己的块中,并使用类似Delegate组件的东西来呈现正确的块,您可以在页面 Java 中的方法中决定该块(返回@Inject-编辑块)

页面.tml

<t:block id="blockA">
    <t:tools.Component1 />
</t:block>

<t:block id="blockB">
    <t:tools.Component2 />
</t:block>

<t:block id="blockC">
    <t:tools.Component3 />
</t:block>

<t:delegate to="blockToRender"/> // chosen block will actually render here

页面 Java

public class YourPage {

    @Inject private Block blockA;
    @Inject private Block blockB;
    @Inject private Block blockC;

    public Object getBlockToRender() {
        Block blockToRender;
        // logic here to set blockToRender to blockA, blockB or blockC
        return blockToRender
    }
}

在不确切知道您想在页面上做什么的情况下,很难更具体地了解评论所在的实现,但希望这会为您指明正确的方向。

于 2013-08-12T00:09:25.560 回答