这是我想要解决的更大问题的一部分,但是如何做到这一点的逻辑思路将帮助我解决我需要的其余部分。
我想知道是否可以让用户从组件列表中进行选择,然后在页面上显示该组件?
例如,如果我有3个链接:
[Component 1]
[Component 2]
[Component 3]
如果用户选择“组件1”,我希望页面刷新并在页面上显示该组件。我想避免为每个组件创建一个单独的页面。我遇到的问题是,如果我在模板(.tml)中使用这样的东西:
<t:tools.HelloComponent> </t:tools.HelloComponent>
然后硬编码总是显示一个组件。我无法在运行时更改.tml文件,因为这会影响所有用户。
我不确定最好的逻辑是什么,所以我只是在寻找一些一般指导。
答案 0 :(得分:2)
您想要使用Blocks之类的声音。
一个块基本上是模板中的一块标记,它不会自动呈现,但可以在Java中引用并按需呈现。
因此,在您的情况下,您可能希望将每个组件放在页面模板中的自己的块中,并使用类似Delegate组件的内容来呈现正确的块,您可以在页面中的方法中决定Java(返回@Inject
- ed块之一)
Page .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
Page 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
}
}
如果不确切地知道你想在页面上做什么,很难对评论的实施情况做更具体的说明,但希望这可以指出你正确的方向。