[英]JSF & Primefaces: Component ID just won't get found
I keep receiving the same exception again and again. 我一次又一次地收到同样的例外。 Comparing exception and hmtl-output without for="#{choiceRadio.clientId}" seems to tell me that binding works. 比较异常和没有for =“#{choiceRadio.clientId}的 hmtl-output ”似乎告诉我绑定有效。 But it just doesn't and I feel like I am missing something huge. 但它只是没有,我觉得我错过了一些巨大的东西。
The Code: 编码:
<p:selectOneRadio binding="#{choiceRadio}" value="#" layout="custom">
<f:selectItems value="#" />
</p:selectOneRadio>
<h:panelGrid columns="1">
<ui:repeat var='choice' value='#{item.items3}'>
<p:radioButton for="#{choiceRadio.clientId}" />#{choice.name}
</ui:repeat>
</h:panelGrid>
</h:form>
The Exception: 例外情况:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Cannot find component 'j_idt34:0:j_idt36:2:j_idt46:j_idt82' in view.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
root cause
javax.faces.FacesException: Cannot find component 'j_idt34:0:j_idt36:2:j_idt46:j_idt82' in view.
org.primefaces.component.radiobutton.RadioButtonRenderer.findSelectOneRadio(RadioButtonRenderer.java:126)
org.primefaces.component.radiobutton.RadioButtonRenderer.encodeEnd(RadioButtonRenderer.java:35)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104)
com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:523)
com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:984)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304)
com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304)
com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304)
com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
org.primefaces.component.lightbox.LightBoxRenderer.encodeMarkup(LightBoxRenderer.java:52)
org.primefaces.component.lightbox.LightBoxRenderer.encodeEnd(LightBoxRenderer.java:32)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
org.primefaces.component.outputpanel.OutputPanelRenderer.encodeEnd(OutputPanelRenderer.java:46)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104)
com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:523)
com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:984)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304)
com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55)
org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
org.primefaces.component.outputpanel.OutputPanelRenderer.encodeEnd(OutputPanelRenderer.java:46)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104)
com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:523)
com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:984)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
note The full stack trace of the root cause is available in the JBoss Web/7.0.13.Final logs.
JBoss Web/7.0.13.Final
Without ui:repeat I don't get any exception but without ui:repeat I do not have any content either: 没有ui:重复我没有任何异常,但没有ui:重复我也没有任何内容:
<p:selectOneRadio id="myRadio" value="#{cartBean.selectedChoice}" layout="custom">
<f:selectItems value="#{item.items3}" />
</p:selectOneRadio>
<h:panelGrid columns="1">
<p:radioButton for="myRadio" value="hh" itemIndex="0"/>
</h:panelGrid>
</h:form>
The for
attribute of the radioButton
must be the id
of the selectOneRadio
it refers to. radioButton
的for
属性必须是它引用的selectOneRadio
的id
。
Add an id
to your selectOneRadio
and refer to it in the button: 在selectOneRadio
添加一个id
并在按钮中引用它:
<p:selectOneRadio id="myRadio" binding="#{choiceRadio}" value="#" layout="custom">
<f:selectItems value="#" />
</p:selectOneRadio>
<h:panelGrid columns="1">
<ui:repeat var='choice' value='#{item.items3}'>
<p:radioButton for="myRadio" />#{choice.name}
</ui:repeat>
</h:panelGrid>
EDIT 编辑
You might need to prepend the ids of all NamingContainer
s right from ViewRoot
before the element id
, like: for="form_id:myRadio"
. 您可能需要在元素id
之前从ViewRoot
预先添加所有NamingContainer
的id
,例如: for="form_id:myRadio"
。
When in doubt what the exact absolute id
of an element might be, look at it in FireBug (Firefox) or developer tools (Chrome) or search for its given id
(in this case "myRadio") in the html output source and skip possible numbers in-between. 如果怀疑元素的确切绝对id
是什么,请在FireBug(Firefox)或开发人员工具(Chrome)中查看它,或在html输出源中搜索其给定的id
(在本例中为“myRadio”)并跳过可能的中间的数字。
So this 所以这
id="iterateCategories:0:iterateItems:2:lightForm:radioForm"
would become 会成为
iterateCategories:iterateItems:lightForm:radioForm
as your absolute id. 作为你的绝对身份。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.