我正在尝试按如下方式使用循环组件。
<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' 转换为组件参数绑定(bind):解析属性表达式 '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>
这意味着问题不在于方法或entry.key。问题是当您尝试在表达式中使用entry.key 时。我是 Tapestry 的新手,正在尝试学习它,谁能告诉我如何在某些表达式中使用循环值?
最佳答案
您不能在 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>
关于java - Tapestry5 : loop, 访问表达式中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21397913/