2011-05-13 58 views
2

我試圖在JSF 1.1中使用JSTL。下面的代碼引起了我一個問題:使用JSTL與JSF 1.1

<c:forEach var="key" items="${names}"> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="#{key}"/> 
     </f:facet> 
     <h:outputText value="#{key}"/> 
    </h:column> 
</c:forEach> 

其中字符串名單。姓名列在表中顯示的數據也就是我想要做有所建樹這樣一個地圖的關鍵:

<h:outputText value="#{data.fooMap[key]}"/> 

此代碼是工作的罰款外H:dataTable的(迭代和顯示名稱),但是當我把它放在桌子裏時,什麼都不顯示。

有沒有人有線索如何解決這個問題?
是否有一個JSF標記可以遍歷h中的列表:dataTable

任何幫助,將不勝感激!

+0

jsp的EL和jsf的EL不會在同一過程中被處理 – 2011-05-13 12:43:49

+0

@Jigar:實際上,它是標籤而不是EL。 – BalusC 2011-05-13 12:45:39

+0

@BalusC謝謝。 – 2011-05-13 12:52:25

回答

5

JSF和JSTL不會像編碼期望的那樣同步運行。在查看構建時,它是JSTL,它從上到下首先運行,結果是一個沒有任何JSTL標記的純JSF組件樹。然後,在視圖呈現時間內,JSF從上到下再次運行以生成HTML。

如果${names}被定義爲<h:dataTable>var,那麼它在JSTL完成其工作時根本不可用。

您需要前往不同的解決方案(在後臺bean中動態填充),或採用允許生成動態列的第三方組件庫。例如RichFaces有一個專門爲此設計的rich:columns組件。

+0

感謝您提出解決方案。由於我即將開始使用MyFaces Tomahawk JSF組件,因此我使用了** t:columns **來解決我的問題。再次感謝! – Igor 2011-05-13 15:37:13

+0

不客氣。 – BalusC 2011-05-13 15:37:37