在自定义selectOneRadio上使用ajax事件时出现异常

Nep*_*daj 2 ajax jsf primefaces

我正在尝试使用自定义布局的selectOneRadio,如上一个示例所示:http://www.primefaces.org/showcase/ui/selectOneRadio.jsf

<p:selectOneRadio id="customRadio" layout="custom"
                  value="#{myBB.queryType}">
    <f:selectItem itemValue="A"/>
    <f:selectItem itemValue="B"/>
    <f:selectItem itemValue="C"/>
    <p:ajax process="@this" update="queryOptions"/>
</p:selectOneRadio>
<p:panelGrid columns="3" id="queryOptions">
    <p:radioButton id="option1" for="customRadio" itemIndex="0"/>
    <p:radioButton id="option2" for="customRadio" itemIndex="1"/>
    <p:radioButton id="option3" for="customRadio" itemIndex="2"/>
    <p:inputText value="#{myBB.queryType}"/>
</p:panelGrid>
Run Code Online (Sandbox Code Playgroud)

我需要自定义布局,因为queryOptionspanelGrid中还有其他组件需要根据所选的radioButton进行更新.backbean中的值在点击时正确更新,但我得到了这个奇怪的异常:

java.lang.NullPointerException
at org.primefaces.component.radiobutton.RadioButtonRenderer.encodeMarkup(RadioButtonRenderer.java:48)
at org.primefaces.component.radiobutton.RadioButtonRenderer.encodeEnd(RadioButtonRenderer.java:38)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeDynamicBody(PanelGridRenderer.java:92)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeBody(PanelGridRenderer.java:60)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:49)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:559)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1729)
Run Code Online (Sandbox Code Playgroud)

可能是什么原因造成的?

我正在使用Primefaces 4.0和Mojarra 2.2.4

Hat*_*mam 6

正如我可以看到你将p:radioButtonajax更新panelGrid 放入其中.

这样您就可以在p:radioButton不更新customeRadio('owner')的情况下更新.

您可以通过两种方式解决此问题:

第一:更新与radioButtons相关的p:selectOneRadio

<p:ajax process="@this" update="queryOptions @this"/>
Run Code Online (Sandbox Code Playgroud)

要么

第二步:将radioButtons放在更新的容器之外.

<p:radioButton id="option1" for="customRadio" itemIndex="0"/>
<p:radioButton id="option2" for="customRadio" itemIndex="1"/>
<p:radioButton id="option3" for="customRadio" itemIndex="2"/>
<p:panelGrid columns="3" id="queryOptions">

</p:panelGrid>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.