【问题标题】:JSF 2 dynamic generated ids not found未找到 JSF 2 动态生成的 ID
【发布时间】:2012-08-29 22:33:17
【问题描述】:

我在渲染参数中的 f:ajax 标记中动态生成的 ID 存在问题。我得到错误:

Component with id:pak_Internet not found

viewId=/start.xhtml
location=C:\servers\apache-tomcat-7.0.29\temp\tst-web-war\start.xhtml
phaseId=RENDER_RESPONSE(6)

Caused by:
javax.faces.FacesException - Component with id:pak_Internet not found
at org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getComponentId(HtmlAjaxBehaviorRenderer.java:411)

代码:

<ui:repeat var="servicesPhones" value="#{cc.attrs.limits.servicesLimits}">  
            <h:selectOneMenu
                value="#{cc.attrs.limits.phoneSelected}">
                **<f:ajax render="pak_#{servicesPhones.name}" event="change" execute="@this"/>**
                <f:selectItems value="#{cc.attrs.limits.getPhones(servicesPhones.name)}" />
            </h:selectOneMenu>

            <h:panelGroup id="pak_#{servicesPhones.name}">
                <ui:repeat var="pak" value="#{cc.attrs.limits.getPackages(servicesPhones.name)}">
                    #{pak.name}<br/>
                </ui:repeat>
            </h:panelGroup>
</ui:repeat>

知道如何解决这个问题吗?

【问题讨论】:

    标签: ajax jsf-2 render


    【解决方案1】:

    只需从 id 属性中删除那些 EL 表达式。 &lt;ui:repeat&gt; 本身已经确保了这些 ID 的唯一性,并且已经更新了正确的 ID。

    <f:ajax ... render="pak" />
    ...
    <h:panelGroup id="pak">
    

    如果您使用这些 EL 表达式的唯一原因是能够在 JavaScript 或 CSS 中识别/选择 JSF 生成的 HTML 表示,那么您需要通过 styleClass 寻找替代方法。

    【讨论】:

      猜你喜欢
      • 2014-12-20
      • 2018-07-12
      • 2013-03-06
      • 2013-06-08
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2011-06-18
      相关资源
      最近更新 更多