jsf - 动态h :outputScript name attribute in ui:repeat

标签 jsf jsf-2

我正在使用com.sun.faces版本2.1.18 。我正在显示问题列表,对于某些问题(基于数据库 ID),我想插入一些动态 Javascript。

根据 h:outputScript tag specification name属性的类型为:javax.el.ValueExpression (必须评估为 java.lang.String )。

但是,这段代码对我有用:

<ui:repeat value="#{js.questionScripts[question.id]}" var="script">
  <h:outputScript name="myScript.js" library="js" target="head"/>
</ui:repeat>

但是这段代码不是:

<ui:repeat value="#{js.questionScripts[question.id]}" var="script">
  <h:outputScript name="#{script}" library="js" target="head"/>
</ui:repeat>

#{question}来自周围<ui:repeat>迭代问题列表。

我添加了一个输出来查看是否 #{script}不为空,但它包含正确的资源名称。

关于如何解决这个问题或实现替代方案有什么想法吗?

最佳答案

<h:outputScript>必须在 View 构建时创建才能被 JSF 资源管理识别。 <ui:repeat>在 View 渲染时间期间运行,因此为时已晚。您必须使用<c:forEach> 。我不确定它对你来说是如何失败的,但它对我来说效果很好,前提是 #{js}是请求、 session 或应用程序范围的 bean,其 questionScripts属性(property)在其(后)施工期间已经准备好,并且 #{question.id}在 View 构建期间可用。

<c:forEach items="#{js.questionScripts[question.id]}" var="script">
    <h:outputScript name="js/#{script}" target="head"/>
</c:forEach>

(请注意,您必须使用 items 属性而不是 value 属性,还要注意我修复了看似 improper usage of library attribute 的问题)

另请参阅:

关于jsf - 动态h :outputScript name attribute in ui:repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831545/

相关文章:

java - 读取 jsf 中 UI 组件的 X,Y 坐标

java - 每个请求的页面都会出现 MalformedInputException

jsf - 在执行 JSF 托管 bean 操作时显示进度图像

java - 为什么我应该使用 JSF 而不是使用简单的 ZK 框架

java - :ajax listener fails within dynamically added h:selectOneMenu

java - 无法在静态 Java 方法中获取数据源

java - 由于 FacesValidator,ManageBean 方法不再有效?

jsf-2 - 如何使用 I18N PrimeFaces 编辑器

java - 如何使错误页面 (http 500) 在 IceFaces 中工作?

jsf - Primefaces 从数据表下载文件