如何动态引用元素id

发布于 2024-10-13 08:38:23 字数 870 浏览 6 评论 0原文

我正在尝试使用 tomahawk selectOneRadio 来扩展单选按钮。我的 id 看起来像这样,

<rich:dataTable id="carTable" value="#{cars}" var="car">
    <rich:column>
        <s:decorate id="types" template="/layout/display-text.xhtml">
            <t:selectOneRadio id="models" value="#{car.model}" layout="spread">
                <f:selectItems value="#{models}" />
            </t:selectOneRadio>
            <h:panelGrid columns="2">
                <a:repeat value="#{models}" rowKeyVar="index">
                    <t:radio for="car:carTable:0:types:models" index="#{index}"></t:radio>
                </a:repeat>
            </h:panelGrid>  -->
        </s:decorate>
    </rich:column> 
</rich:dataTable>

我在检查元素后引用了 id。但这是行不通的。因为每次迭代单选按钮 id 都会有所不同。如何在 t:radio 中引用 id

I am trying to spread the radio buttons using tomahawk selectOneRadio. My id looks like this

<rich:dataTable id="carTable" value="#{cars}" var="car">
    <rich:column>
        <s:decorate id="types" template="/layout/display-text.xhtml">
            <t:selectOneRadio id="models" value="#{car.model}" layout="spread">
                <f:selectItems value="#{models}" />
            </t:selectOneRadio>
            <h:panelGrid columns="2">
                <a:repeat value="#{models}" rowKeyVar="index">
                    <t:radio for="car:carTable:0:types:models" index="#{index}"></t:radio>
                </a:repeat>
            </h:panelGrid>  -->
        </s:decorate>
    </rich:column> 
</rich:dataTable>

I referred id after inspecting an element. But this is not working. Because for each iteration radio button id varies. How to refer an id in t:radio

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

腻橙味 2024-10-20 08:38:23

t:radio 文档 说:

引用的扩展selectOneRadio组件的id。使用标准 UIComponent.findComponent()搜索算法。

我猜测 a:repeat 是一个 NamingContainer,因此使用 "models" 不起作用。您可以使用客户端标识符< t:selectOneRadio 组件的 /a>。

像这样的东西:

<t:selectOneRadio id="models" value="#{car.model}" layout="spread"
   binding="#{requestScope.modelComponent}">
  <f:selectItems value="#{models}" />
</t:selectOneRadio>
<h:panelGrid columns="2">
  <a:repeat value="#{models}" rowKeyVar="index">
    <t:radio for="#{requestScope.modelComponent.clientId}" index="#{index}" />
  </a:repeat>
</h:panelGrid>

注意:

  1. 这使用键“modelComponent”将组件绑定到请求范围映射;您需要确保这不会与其他内容发生冲突
  2. 解析 modelComponent.clientId 需要 JSF 2.0 (JEE6) 或更高版本

请参阅此处了解更多详细信息;使用旧版本; ETC。

The documentation for t:radio says:

The id of the referenced extended selectOneRadio component. This value is resolved to the particular component using the standard UIComponent.findComponent() searching algorithm.

I'm guessing a:repeat is a NamingContainer, so using "models" won't work. You can use the client identifier of the t:selectOneRadio component.

Something like this:

<t:selectOneRadio id="models" value="#{car.model}" layout="spread"
   binding="#{requestScope.modelComponent}">
  <f:selectItems value="#{models}" />
</t:selectOneRadio>
<h:panelGrid columns="2">
  <a:repeat value="#{models}" rowKeyVar="index">
    <t:radio for="#{requestScope.modelComponent.clientId}" index="#{index}" />
  </a:repeat>
</h:panelGrid>

Caveats:

  1. This binds the component to the request scope map using the key "modelComponent"; you need to ensure this doesn't collide with something else
  2. Resolving modelComponent.clientId requires JSF 2.0 (JEE6) or above

See here for more details; working with older versions; etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文