我正在尝试使用循环组件,如下所示。
<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的新手并试图学习它,有人能告诉我如何在某个表达式中使用循环值吗?
答案 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>