我在渲染参数中的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>
知道如何解决这个问题吗?
答案 0 :(得分:1)
只需从id
attribtue中删除这些EL表达式即可。 <ui:repeat>
本身已经确保了这些ID的唯一性,并且已经更新了正确的ID。
<f:ajax ... render="pak" />
...
<h:panelGroup id="pak">
如果您使用这些EL表达式的唯一理由是能够在JavaScript或CSS中识别/选择JSF生成的HTML表示,那么您需要通过styleClass
寻找替代方法。< / p>