gpt4 book ai didi

jsf - Omnifaces TagAttribute Id 不能用作 id

转载 作者:行者123 更新时间:2023-12-04 14:53:48 27 4
gpt4 key购买 nike

我有以下 Facelet 标签库:

<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:o="http://omnifaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html">

<o:tagAttribute name="id"/>

<h:panelGroup id="#{id}" layout="block" styleClass="idTest">
#{id}
</h:panelGroup>
</ui:composition>

taglib.xml 如下所示:

<tag>
<tag-name>idTest</tag-name>
<source>resources/myProject/tags/idTest.xhtml</source>
</tag>

使用它的代码很简单:

<myProject:idTest/>

怎么会呈现以下 HTML:

<div class="idTest">
j_ido489794984_4bf870cd
</div>

为什么我的 PanelGroup 没有 idid 是根据 o:tagAttribute 的文档按预期生成的,因为呈现了 div 的内容。但是作为 id 它不起作用。为什么?

最佳答案

这确实令人困惑。

documentation字面意思是:

... it will autogenerate an unique ID in the form of j_ido[tagId] where [tagId] is the <o:tagAttribute> tag's own unique ID.

但实际行为更像是这样:

... it will override any autogenerated ID into the form of j_ido[tagId] where [tagId] is the <o:tagAttribute> tag's own unique ID.

换句话说,当 JSF 本身需要 呈现 id 时HTML 元素的属性,通常是因为链中更下游的某些内部逻辑需要它,例如 <f:ajax>和 friend ,并且没有像这样在标签上指定明确的 ID <x:someTag id="fixedId" /> , 那么 JSF 将默认自动生成 j_id[autoIncrementInteger] 形式的一个.但这在标记文件上会出错,因为 autoIncrementInteger根据所使用的 JSF impl 和 View 状态配置,每次回发可能会进一步增加一个。 <o:tagAttribute>只是尝试以这种方式确保自动生成的 ID 在每次回发时保持相同。

当您编辑测试标记文件以添加 <f:ajax> 时,

<h:panelGroup id="#{id}" layout="block" styleClass="idTest">
<f:ajax event="click" />
</h:panelGroup>

然后你会看到生成的<div>有一个 id ,因为这是 <f:ajax> 的技术要求.

<div id="j_ido-1512689859_13a7e7e3" class="idTest"
onclick="mojarra.ab(this,event,'click',0,0)">
</div>

或者当你交换 <h:panelGroup> 时例如一个<h:form>或在客户端始终需要 ID 的任何组件,

<h:form id="#{id}" styleClass="idTest">
<ui:insert />
</h:form>

然后您还会看到它已生成。

<form id="j_ido-1512689859_13a7e7e3" name="j_ido-1512689859_13a7e7e3" method="post" action="/test.xhtml" class="idTest" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_ido-1512689859_13a7e7e3" value="j_ido-1512689859_13a7e7e3" />
...
</form>

换句话说,该功能运行良好,但在您的特定情况下根本没有使用它,因为 JSF 认为没有必要生成它。

同时我有updated文档。

关于jsf - Omnifaces TagAttribute Id 不能用作 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68544641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com