Loops 如何打破挂毯循环?
所以,我试图打破这里的tapestry循环 这是我或多或少简化的场景:Loops 如何打破挂毯循环?,loops,break,tapestry,Loops,Break,Tapestry,所以,我试图打破这里的tapestry循环 这是我或多或少简化的场景: <ul> <t:loop source="firstSource" value="firstValue"> <li> <t:loop source="firstValue" value="secondValue"> <p>${secondValue}</p&
<ul>
<t:loop source="firstSource" value="firstValue">
<li>
<t:loop source="firstValue" value="secondValue">
<p>${secondValue}</p>
</t:loop>
<t:loop source="secondSource" value="thirdValue">
<p>${thirdValue}</p>
</t:loop>
</li>
</t:loop>
</ul>
-
${secondValue}
${thirdValue}
我不想要的是:
Tapestry遍历firstValue中的所有条目,然后遍历secondSource中的所有条目。我不想在fristValue循环中迭代secondSource,因为这将迭代secondSource中的所有条目——我只想一次迭代一次
我想要的是:
Tapestry进入firstValue的循环并进行一些打印或其他操作,然后在第一次迭代后中断并跳入secondSource进行第一次迭代。完成后,它跳回firstValue并重复这些步骤。
在Java中,“break;”就是这样做的
我在Tapestry文档中以及他们的论坛中都没有找到关于如何做到这一点的线索
但这在某种程度上是可能的。我无法想象我是唯一一个尝试这样做的人。在逻辑周围放一个if语句,可能使用一个索引变量:
<t:loop source="firstSource" value="firstValue">
<li>
<t:loop source="firstValue" value="secondValue" index="firstValueIndex">
<t:if test="firstCondition">
<p>${secondValue}</p>
</t:if>
</t:loop>
<t:loop source="secondSource" value="thirdValue">
<t:if test="secondCondition">
<p>${thirdValue}</p>
</t:if>
</t:loop>
</li>
</t:loop>
我猜您有三个数据源,并试图输出三列,对吗 有时您必须稍微转换数据:例如,您可能需要做一些工作,将三个输入中的一个值转换为单个值:
public class Row {
Object col1, col2, col2;
}
在Java代码中,您将建立一个行对象列表
在模板中,迭代行对象,呈现col1、col2和col3属性
(在Tapestry 5.3及更高版本中,公共字段可以视为属性。)
我使用了类似的技术来输出日历,在模板中使用条件等来管理日历可能非常棘手
记住MVC中控制器的角色:它的工作是在模型和视图之间进行调解;有时,这包括一些简单的模型数据转换,以适应视图。是的,谢谢,这非常神奇。我所要做的就是玩弄循环索引。我不会说输出将是基于列的,它更像是三个数据源的“混合物”——正如你所说的那样。但你是对的,也许最好先将必要的值组合到一个新的数据结构中,并呈现这个数据结构,而不是执行所有这些循环和条件测试。
public class Row {
Object col1, col2, col2;
}