我正在尝试在scriplet中获取JSF数据表的行索引。
使用JSF组件,它就像一个魅力:
<h:outputText value="#{Operations.postsDataTable.rowIndex}" />
但是当我使用这样的scriptlet时:
<% out.println(Operations.getPostsDataTable().getRowIndex()); %>
然后它会为每一行打印-1
。我做错了什么?
答案 0 :(得分:2)
我做错了什么?
在shouldn't时使用 scriptlet 。自从十年前的JSP 2.0以来,它们的使用受到劝阻。
导致您的具体问题是因为它们在视图构建期间运行,而不是在视图渲染时间内运行,与JSTL和所有其他标记处理程序完全相同。在这个答案中对此进行了详细解释:JSTL in JSF2 Facelets... makes sense?只需用“scriptlets”替换“JSTL”即可了解正在发生的事情。总结:它们不与JSF组件“同步”运行。它们在构建JSF组件树期间执行,而不是在JSF组件树生成HTML输出期间执行,如您所期望的那样。
顺便说一句,在JSP的后继者Facelets(XHTML)中,已经不可能使用 scriptlets ,所以你不得不以“正确的方式”做事。