【问题标题】:using getRowIndex in scriplet在 scriptlet 中使用 getRowIndex
【发布时间】:2012-08-08 17:15:06
【问题描述】:

我正在尝试在脚本中获取 JSF 数据表的行索引。

使用 JSF 组件,它就像一个魅力:

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

但是当我使用这样的脚本时:

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

然后它将为每一行打印-1。我做错了什么?

【问题讨论】:

  • 为什么要回到技术领域?如果您不能使用 JSF,请使用 JSTL。

标签: jsp jsf datatable scriptlet


【解决方案1】:

我做错了什么?

在你shouldn't时使用scriptlets。自十年前的 JSP 2.0 以来,不鼓励使用它们。

您的具体问题是因为它们在视图构建期间运行,而不是在视图渲染期间运行,就像 JSTL 和所有其他标记处理程序一样。此答案中对此进行了详细说明:JSTL in JSF2 Facelets... makes sense? 只需将“JSTL”替换为“scriptlet”即可了解发生了什么。总结:它们不会与 JSF 组件“同步”运行。它们是在构建 JSF 组件树期间执行的,而不是在 JSF 组件树生成 HTML 输出的过程中,正如您所期望的那样。

顺便说一句,在 JSP 的继任者 Facelets (XHTML) 中,已经不可能使用 scriptlets,所以你不得不已经“以正确的方式”做事了。

【讨论】:

  • 感谢您的快速回答...我想在输出文本中使用锚点,所以它会像这样: ,但它给了我错误“根据 tdl,属性 id 不是延迟值或延迟方法,但指定值包含 # 表达式”......任何想法如何使它工作?我用 $ 替换了 # 但它给了我其他错误 (java.lang.IllegalArgumentException: -1)
  • id 属性也在视图构建期间进行评估(您还应该想到,如果您单击了“JSTL in JSF2”链接...),原因很简单,即物理JSF 组件树中只有一个输出文本组件,而不是您预期的多个。在视图渲染期间,这个相同的组件会被多次重用。您的具体功能要求并不完全清楚,但我相信您正在寻找&lt;span id="#{Operations.postsDataTable.rowIndex}"&gt;
  • 它不允许我使用你写的代码..没有#它也不起作用......还有其他建议吗?所以你可以更好地理解我想要做什么:我正在做一个论坛,每个帖子都应该有一个锚点,所以当链接为“...index.jsp#5”时,滚动将移动到帖子5号。
  • 那就用&lt;h:outputLink&gt;吧。
猜你喜欢
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多