gpt4 book ai didi

jsf - 如何创建一个在 inputText 和 inputSecret 之间切换的复合组件?

转载 作者:行者123 更新时间:2023-12-04 18:14:43 25 4
gpt4 key购买 nike

我正在编写一个 Facelets 复合组件,它基于一个参数在使用 inputText 和 inputSecret 之间切换:

<composite:interface>
<composite:attribute name="myId" required="true"/>
<composite:attribute name="secret" required="false" default="false" />
</composite:interface>

<composite:implementation>
<h:inputSecret rendered="#{cc.attrs.secret}" id="#{cc.attrs.myId}" />
<h:inputText rendered="#{!cc.attrs.secret}" id="#{cc.attrs.myId}" />
</composite:implementation>

问题是我收到以下错误:

Component ID [JSF mangled id] has already been found in the view.

最佳答案

使用像 JSTL <c:if> 这样的 View 构建时间标签或 <c:choose>而不是 JSF 组件的 rendered属性。在构建 JSF 组件树期间评估 View 构建时间标签,而仅在基于 JSF 组件树生成 HTML 期间评估渲染属性(因此您仍然会得到 两个 组件在JSF 组件树!)。

例如。

<c:if test="#{not cc.attrs.secret}">
<h:inputText id="input" />
</c:if>
<c:if test="#{cc.attrs.secret}">
<h:inputSecret id="input" />
</c:if>

也可以看看:
  • JSTL in JSF2 Facelets... makes sense?


  • 无关 对于具体问题, myId没有意义。给他们一个固定的ID。如果原因是无法通过 ajax 从外部引用它们,请前往 Referring composite component ID in f:ajax render .

    关于jsf - 如何创建一个在 inputText 和 inputSecret 之间切换的复合组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954395/

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