2012-10-23 87 views
0

我一直接受同样的异常。对于=“#{choiceRadio.clientId}”比较异常和hmtl输出没有似乎告诉我绑定有效。但它只是不,我觉得我错过了一些巨大的东西。JSF&Primefaces:组件ID不会被发现

验证码:

<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> 

例外:

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 

无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> 
+0

可能的重复http://stackoverflow.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-identifier – perissf

+0

这绝对有可能。这是我之前读过的问题/答案之一。也许我真的不明白,因为它在实践中无法帮助我。 – Lester

回答

2

for属性th e radioButton必须是它所指的selectOneRadioid

添加idselectOneRadio和引用它的按钮:

<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> 

编辑

您可能需要的元素id之前,从ViewRoot预先准备的所有NamingContainer的权利的ID如:for="form_id:myRadio"

疑问时什么元素的确切绝对id可能是,看它在Firebug(火狐)或开发工具(铬)或搜索其给定id(在这种情况下,“myRadio”)在HTML输出源和跳过可能的数字之间。

所以这

id="iterateCategories:0:iterateItems:2:lightForm:radioForm"

将成为

iterateCategories:iterateItems:lightForm:radioForm

为您绝对的ID。

+0

感谢您的回答,但是这样做非常相似_javax.servlet.ServletException:在视图中找不到组件'myRadio'。这就是我开始的地方... – Lester

+0

@Lester - 那么您还需要预先填写表单ID - 我已经添加一些细节到答案 – kostja

+0

从生成的HTML(没有p:单选按钮,因此没有例外)的id是:form id =“j_idt34:0:j_idt36:2:form_id