我正在尝试动态生成包含列的表。
目前,这是我的代码:
<s:iterator value='entities' var="entity">
<tr>
<s:iterator value="beanMD.fieldsMetaData" var="fieldMD" >
<td><s:property value="#entity.email"/> <!-- Prints OK : email@email.com -->
<s:property value="#fieldMD.value.name"/> <!-- Prints OK : email-->
<s:property value="#entity.%{#fieldMD.value.name}" /> <!-- Nothing -->
<s:property value="#entity.%{fieldMD.value.name}" /> <!-- Nothing -->
<s:property value="entity.%{fieldMD.value.name}" /> <!-- Nothing -->
<s:property value="entity.%{#fieldMD.value.name}" /> <!-- Nothing -->
</td>
</s:iterator>
</tr>
</iterator>
实体它是带有数据的bean的集合。
beanMD.fieldsMetadata
是一张地图,其中包含实体的属性。
在上面的示例中,我使用属性“email”作为示例。如果我直接询问该属性,则返回OK。如果我问列名,那也没关系。 但是我找不到一种方法来共同使用它。
这篇文章似乎有关, Struts2 with Nested Iterator dynamic column and rows 但是它使用了所有地图,并没有给我太多帮助。
答案 0 :(得分:1)
使用方括号从bean中获取值。
<s:property value="#entity[#fieldMD.value.name]" />
这是可能的,因为内部OGNL将以下表达式视为完全相同。
所以
<s:property value="date.time" />
和
<s:property value="date['time']" />
产生相同的结果。