2012-08-11 27 views
0

我想要在scriplet中獲取JSF數據表的行索引。在scriplet中使用getRowIndex

隨着JSF組件,它就像一個魅力:

<h:outputText value="#{Operations.postsDataTable.rowIndex}" /> 

但是,當我使用這樣的小腳本:

<% out.println(Operations.getPostsDataTable().getRowIndex()); %> 

然後將打印-1每一行。我究竟做錯了什麼?

+1

爲什麼要回到技術?如果您不能使用JSF,請使用JSTL。 – 2012-08-11 22:05:17

回答

2

我在做什麼錯?

爲了這一點,使用小腳本而你shouldn't。從十年前的JSP 2.0開始,它們的使用就不受歡迎了。因爲它們在視圖生成時運行

你的具體問題引起的,而不是視圖中的渲染時間,酷似作爲JSTL和所有其他taghandlers。這在這個答案中有詳細的解釋:JSTL in JSF2 Facelets... makes sense?用「scriptlets」代替「JSTL」來理解發生了什麼。總結:它們不會與JSF組件「同步」運行。它們在構建JSF組件樹期間得到執行,而不是像您期望的那樣在JSF組件樹生成HTML輸出期間執行。

順便說一句,在JSP的繼任Facelets(XHTML),它已經不可能使用小腳本,所以你不得不做的事情「正確的方式」了。

+0

感謝您的快速回答...我想在輸出文本中使用錨點,所以它會像這樣:,但它給了我錯誤「根據tdl,屬性id不是延期值或延期方法,但指定值包含#表達式」...任何想法如何使其工作?我用$替換了#,但它給了我其他錯誤(java.lang.IllegalArgumentException:-1) – Myth 2012-08-12 00:03:07

+0

'id'屬性也在視圖編譯期間被評估過(你也應該知道如果你點擊了「JSTL in JSF2「鏈接...),原因很簡單,那就是JSF組件樹中只有一個輸出文本組件,而不是像您期望的那樣多。這一個和同一個組件在視圖渲染時間內被多次重用。您的具體功能需求並不完全清楚,但我相信您正在尋找一個'''。 – BalusC 2012-08-12 00:40:50

+0

它不讓我使用你寫的代碼..沒有#它不工作...任何其他建議?所以你可以更好地理解我想做什麼:我在做一個論壇,每個帖子都應該有一個錨點,所以當鏈接將是「... index.jsp#5」時,滾動將移動到帖子編號5. – Myth 2012-08-12 04:47:18

相關問題