Tapestry5:循环,表达式中的访问值

时间:2014-01-28 05:52:06

标签: java loops tapestry

我正在尝试使用循环组件,如下所示。

<tr t:type="Loop" t:source="summarizer.byAssociationConceptSorted" t:value="entry" >
    <td style="border: 1px solid #EEEEEE; padding: 3px">${page.store.loadConcept(${entry.key}).name}</td>
    <td style="border: 1px solid #EEEEEE; padding: 3px">${entry.value}</td>
</tr>

这里,entry.key是String,entry.value是Long

它在Tapestry中生成异常.....“无法转换”page.store.loadConcept($ {entry.key'到组件参数绑定:解析属性表达式时出错'page.store.loadConcept($ { entry.key':无法解析字符位置25处的输入。“

如果我这样做,它可以正常工作,

<tr t:type="Loop" t:source="summarizer.byAssociationConceptSorted" t:value="entry" >
    <td style="border: 1px solid #EEEEEE; padding: 3px">${entry.key}</td>
    <td style="border: 1px solid #EEEEEE; padding: 3px">${entry.value}</td>
</tr>

这很好用。当我尝试在表达式中使用entry.key时抛出异常。

我也可以使用像这样的方法loadConcept,

<tr t:type="Loop" t:source="summarizer.byAssociationConceptSorted" t:value="entry" >
    <td style="border: 1px solid #EEEEEE; padding: 3px">${page.store.loadConcept('some id').name}</td>
    <td style="border: 1px solid #EEEEEE; padding: 3px">${entry.value}</td>
</tr>

这意味着问题不在于method或entry.key。问题是当您尝试在表达式中使用entry.key时。我是Tapestry的新手并试图学习它,有人能告诉我如何在某个表达式中使用循环值吗?

1 个答案:

答案 0 :(得分:2)

您不能在tapestry中的其他表达式中使用表达式。始终建议在java类中为这样的表达式使用单独的方法,例如:

<tr t:type="Loop" t:source="summarizer.byAssociationConceptSorted" t:value="entry" >
    <td>${entryConcept.name}</td>
    <td>${entry.value}</td>
</tr>

在java类中:

public Concept getEntryConcept() {
    return getPage().getStore().loadConcept(entry.getKey());
}

也可以但不建议使用这样的东西:

<tr t:type="Loop" t:source="summarizer.byAssociationConceptSorted" t:value="entry" >
    <td>${page.store.loadConcept(entry.key).name}</td>
    <td>${entry.value}</td>
</tr>