異常

2014-02-25 87 views
1

我試圖使用自定義佈局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> 

我需要自定義佈局,因爲在其他組件queryOptions panelGrid,我需要根據選定的radioButton進行更新。 backingbean中的值在點擊時正確更新,但我得到這個奇怪的例外:

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) 

什麼可能導致它?

我使用Primefaces 4.0和2.2.4鑽嘴魚科

回答

5

,我可以看到你把p:radioButton阿賈克斯更新panelGrid的內部。

這樣,你正在更新p:radioButton而不更新customeRadio(「所有者」)。

您可以通過兩種方式解決這個問題:

第一:更新也號碼:相關單選按鈕

<p:ajax process="@this" update="queryOptions @this"/> 

OR

二selectOneRadio:將radioButton放在更新後的容器之外。

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

希望這會有所幫助。

+0

謝謝。當我更新公共父項時,我不會再有異常。但是我有另外一個問題。 '''queryOptions'''面板中的值不會更新(我已經編輯了該帖子,而inputText僅更改頁面刷新時的值)。任何想法? – NeplatnyUdaj

+0

當然,他們不會被更新,因爲AJAX的過程@this,你可能也需要處理單選按鈕...例如: ''。 ,因爲基本上radioButtons和inputtext都在網格中呈現,並且沒有被處理,所以這個值不會被更新! –

+0

那麼......這個組件讓我困惑了一下。謝謝!最後一個問題。當我有''''''更新可行,但我只能選擇一個項目。然後我必須刷新以做出另一個選擇。沒有例外。也許這對你來說也是一件不容易的事情:) – NeplatnyUdaj