【问题标题】:How to use a default generated ID in a Facelet tag如何在 Facelet 标记中使用默认生成的 ID
【发布时间】:2017-09-02 15:19:37
【问题描述】:

我创建了一个custom Facelet tag。我希望 ID 回退到默认的 j_idtXxx,就像您在 XHTML 中未设置整个 ID 属性时忽略它一样。

所以,我希望将<my:tag id="fiets"/> 呈现为<span id="fiets"/>

但是,<my:tag/> 应该呈现为<span id="j_idtXxx"/>

如果我在标记文件中使用<h:anyTag id="#{id}"/>,它只会在空 ID 属性上失败。有什么方法可以呈现为默认生成的 ID?我想创建类似的东西:

<c:set var="id" value="#{empty id ? USE_DEFAULT : id}" />

但我不知道在USE_DEFAULT 使用什么。

【问题讨论】:

    标签: jsf jsf-2.2 facelets facelet-tag


    【解决方案1】:

    UIViewRoot#createUniqueId() 提供该功能。当前的UIViewRoot 实例在EL 中可用作隐式对象#{view}

    所以,应该这样做:

    <c:set var="id" value="#{empty id ? view.createUniqueId() : id}" />
    

    【讨论】:

    • 感谢您的及时答复。就我而言,这会导致异常:Component ID main:j_id6 has already been found in the view.
    • 如果它有 scope="request" 或更宽,并且有多个相同标签的实例,则可能会发生这种情况。
    • 我删除了&lt;c:set ../&gt;,只使用了id="#{empty id ? view.createUniqueId() : id}"。现在可以了。
    • 奇怪。它默认为“无”范围(即无处存储并每次评估)。您使用的是哪个 JSF 实现/版本?
    • 我正在使用 Mojarra 2.2.7
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多