我知道有一些这样的问题,但我认为他们没有回答我的问题。
我想允许我的应用程序的管理员用户更改特定页面上的组件及其顺序。所以例如:
页面 A 将包含组件 1、2、3 页面 B 将包含组件 4、3、2
我不是在页面加载之后尝试修改它,而是在之前(例如,可以从数据库中读取页面所需的结构)。
这是否违反了 Tapestry 的静态结构?有可能做到这一点吗?
我知道有一些这样的问题,但我认为他们没有回答我的问题。
我想允许我的应用程序的管理员用户更改特定页面上的组件及其顺序。所以例如:
页面 A 将包含组件 1、2、3 页面 B 将包含组件 4、3、2
我不是在页面加载之后尝试修改它,而是在之前(例如,可以从数据库中读取页面所需的结构)。
这是否违反了 Tapestry 的静态结构?有可能做到这一点吗?
您可以使用 Blocks 和 Delegate 组件来实现这一点。
显然,您将需要研究get...Block
方法的逻辑,但您应该能够弄清楚一些事情。
在这种情况下,静态结构是指您的标记需要声明所有可能呈现的嵌入式组件这一事实。然后,您可以使用逻辑和其他组件来决定按什么顺序呈现什么。
爪哇:
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" />
</...>