jsf - 获取复合组件本身的客户端 ID 以在 JavaScript 中使用

标签 jsf composite-component clientid

我有一些有趣的问题要问你。我正在创建一个复合组件。我知道,我可以使用 ui:param 来存储值并重用它。但是,如果我向该变量存储一些相对值 (#{component.namingContainer.clientId}) 并希望将其作为常量重用,该怎么办?这很难解释 - 这里有我的代码:

<ui:param name="rdfaComp" value="#{component.namingContainer.clientId}"/>

它位于页面的开头 - 我想准确存储此 ID,然后通过此变量不使用任何其他内容。但后来如果我在具有自己 ID 的元素内重用它,那就很糟糕了。有趣的是,发生了什么 - JSF 不采用相同的值,而是一个相对的值。它再次读取#{component.namingContainer.clientId},而不是固定值。

请问这个问题怎么解决,可以帮帮我吗?非常感谢。

已更新 还有一个重要条件:变量 rdfaComp 必须立即可用,因为我在 Javascript 函数(在同一页面上)中重用了它。像这样:

<h:commandButton onclick="return selectText('#{rdfaComp}:editor', ...

恐怕,有必要使用像这样的相对ID链:#{component.namingContainer.parent.namingContainer.parent.clientId}等。 但这真的很糟糕。还有其他解决方案吗?

最佳答案

<ui:param>实际上只是创建一个别名,并且 EL 表达式仍然在与引用它的位置完全相同的上下文中的每次访问时被延迟和评估(因此不是它被声明的位置!这解释了你的具体问题)。此外,<ui:param>设计用于<ui:include> , <ui:composition><ui:decorate>仅有的。

使用<c:set>反而。它能够立即计算 EL 表达式,并通过 scope 将其结果存储在请求、 View 、 session 或应用程序范围中。属性。

<c:set var="rdfaComp" value="#{component.namingContainer.clientId}" scope="request" />

更新:您实际上想要获取复合组件本身的客户端 ID,以下是获取它的方法:

<c:set var="rdfaComp" value="#{cc.clientId}" scope="request" />

关于jsf - 获取复合组件本身的客户端 ID 以在 JavaScript 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18857937/

相关文章:

javascript - Google Analytics 空 clientID

azure - 如何在 ARM 模板中获取用户分配身份的客户端 ID?

session - WAR 之间共享 session

jsf - 无法在删除确认对话框中显示对象详细信息

java - <my :foo> Tag Library supports namespace: http://java. sun.com/jsf/composite/mycomponents,但没有为名称定义标签:foo

attributes - 复合组件属性中的枚举值

jsf-2 - 带有 (ENUM) 转换器的复合组件和 SelectOneMenu

jquery - 处理 ASP.NET 的 ClientID 的最佳方法是什么

java - 可用的 JSF MVC 组件

ajax - 格式错误的XML : During update: adminUsersForm not found