2013-02-10 80 views
1

我有一個請求屬性「BillSummaryTables」中的表名稱列表。我遍歷整個列表,我想使用每個表名來獲取特定表名的請求屬性。對應於每個表名,我在請求屬性中有另一個列表,我想遍歷它。Struts2標籤:獲取請求屬性,其名稱本身是另一個請求屬性的值

這就是我正在做的。

<s:iterator value='#request.BillSummaryTables' var="tableName" status="itStatus"> 
<div class="contentbox" role="content"> 
    <table class="rpt"> 
    <s:iterator value="#request.get('%{#tableName}').getData()" var="ocRow" status="itStatus"> 
     <tr style="border:1px solid #CCCCCC"> 
     <s:iterator value='#ocRow' var="cell" status="itStatus2"> 
      <td> 
      <s:property value="#cell.getValue()"/> 
      </td> 
     </s:iterator> 
     </tr> 
    </s:iterator> 
     <tr> 
     <s:iterator value="#request.get('%{#tableName}').getData()" var="ocTotal"> 
      <td> 
      <s:property value="#ocTotal"/> 
      </td> 
     </s:iterator> 
     </tr> 
    </table>  
</div> 
</s:iterator> 

我也曾嘗試

#request[<s:property value="#tableName" />].getData() 

#request['<s:property value="#tableName" />'].getData() 

#request.%{#tableName} 

但沒有什麼是在任何情況下返回。 但是,如果我硬編碼值,此代碼工作正常。 即如果我使用:#request['other_charges'].getData()

注意:我能夠檢索tableName(#request.BillSummaryTables)的列表。

+0

,你能否告訴我們,作爲傳遞的請求參數GET請求? – Quaternion 2013-02-10 16:35:42

+0

此外,最好還是看看相關屬性的定義。 – Quaternion 2013-02-10 22:05:24

回答

2

#1)您正在使用三個嵌套迭代器,但第一個和第二個都有一個名爲itStatus的IteratorStatus實例;他們必須有不同的名字才能工作。

#2)如果對應於表名稱,有效,一個列表,那麼你應該遍歷列表中的List S,不是getData()東西(那是什麼?)

#3)爲什麼使用請求?爲什麼不簡單地在Action上使用HashMap(使用getter),使用table name s作爲關鍵字動態添加元素?

#4)如果換一種Struts2的標籤裏面,就像一個Iterator這#request[<s:property value="#tableName" />].getData()會顯然是不行的(不能嵌套Struts2的標籤)。

然而,嘗試這樣的事情(我扯下了第二個迭代器,使其運行前,再加入的東西),看看它是否工作(以及它打印):

<s:iterator value='#request.BillSummaryTables' var="tableName" status="statusAllTables"> 
    <div class="contentbox" role="content"> 

     <br/>==== START DEBUG ==== 
     <br/>Current table name: [<s:property value="#tableName"/>] 
     <br/>Corresponding request object: [<s:property value="#request['%{#tableName}']"/>] 
     <br/>getData on that object: [<s:property value="#request['%{#tableName}'].getData()"/>] 
     <br/>===== END DEBUG ===== 

     <table class="rpt"> 
      <s:iterator value="#request['%{#tableName}'].getData()" var="ocRow" status="statusThisTable"> 
       <tr style="border:1px solid #CCCCCC"> 
        <s:iterator value='#ocRow' var="cell" status="statusThisField"> 
         <td> 
          <s:property value="#cell.getValue()"/> 
         </td> 
        </s:iterator> 
       </tr> 
      </s:iterator> 
     </table>  
    </div> 
</s:iterator> 

編輯

好的,但那麼你爲什麼使用request.setAttribute?操作是每個請求創建...只是使用其吸氣劑(public List<MyObject> getMyObjects())一private List<MyObjects> myObjects,並從JSP與<s:iterator value="myObjects">調用它(在你的情況,<s:iterator value="myObjects.data">

請注意,在.getData()OGNL成爲.data(我沒「T之前注意到了這一點),除去GET,降低了該方法的第一個字母,並移除圓括號...

重試,讓我們知道。

+0

感謝Andrea的回覆,但我想我應該以更好的方式提出我的問題。 BillSummaryTables給了我一個我想要展示的表格列表。現在假設第一個表名是「other_charges」。我已經使用request.setAttribute(「other_charges」,other_chargesTable)在我的操作中保存了一個名爲Table的對象。 該對象包含一些其他屬性以及我將使用getData()獲取的列表,然後遍歷該列表。 – nevin 2013-02-11 13:52:09

+0

+1爲一般信息。 – 2013-02-11 17:25:28