动态struts2对象字段名称

时间:2013-08-08 00:56:31

标签: struts2 iterator

我正在尝试动态生成包含列的表。

目前,这是我的代码:

<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 但是它使用了所有地图,并没有给我太多帮助。

1 个答案:

答案 0 :(得分:1)

使用方括号从bean中获取值。

<s:property value="#entity[#fieldMD.value.name]" />

这是可能的,因为内部OGNL将以下表达式视为完全相同。

所以

<s:property value="date.time" />

<s:property value="date['time']" />

产生相同的结果。