Java Tapestry 5组件故障

Java Tapestry 5组件故障,java,tapestry,Java,Tapestry,这是我试图解决的一个更大问题的一部分,但是关于如何解决这个问题的一些逻辑想法将帮助我解决我需要的其他问题 我想知道是否可以让用户从组件列表中选择,然后在页面上显示该组件 例如,如果我有3个链接: [Component 1] [Component 2] [Component 3] 如果用户选择“组件1”,我希望页面刷新并在页面上显示该组件。我希望避免为每个组件创建单独的页面。我遇到的问题是,如果我在模板(.tml)中使用类似的内容: 然后,它被硬编码为始终显示一个组件。我无法在运行时更改.t

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

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

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

[Component 1]
[Component 2]
[Component 3]
如果用户选择“组件1”,我希望页面刷新并在页面上显示该组件。我希望避免为每个组件创建单独的页面。我遇到的问题是,如果我在模板(.tml)中使用类似的内容:


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

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

听起来像是您想要使用的

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

因此,在您的例子中,您可能希望将每个组件放在页面模板中自己的块中,并使用类似于组件的东西来呈现正确的块,这是您在页面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

如果不知道您想在页面上做什么,就很难更具体地说明注释所在的实现,但希望这能为您指明正确的方向。

这里可能也值得一提
<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
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
    }
}