2012-06-05 60 views
1

我讀過有關與@ViewScoped(BUG REPORT)綁定的錯誤,它是固定在JSF的最新版本之一,所以我測試了與JSF的3個最新版本,並嘗試使用JSF 2.2 @ViewScoped綁定錯誤?

<context-param> 
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name> 
<param-value>false</param-value> 

修復解決它,但沒有運氣。

我有一個primefaces數據表,我在每個列標題中都有過濾器。

 <p:column id="cpfHeader" sortBy="#{cliente.nrCpf}" 
     filterMatchMode="contains"> 
     <f:facet name="header"> 
      <h:panelGrid columns="1"> 
       <h:outputText value="CPF" /> 
       <p:inputText value="#{cadastroClienteBean.cliente.nrCpf}"> 

       </p:inputText> 
       <p:commandButton 
        actionListener="#{cadastroClienteBean.getClientesBusca}" 
        update="#{form}:tabelaCliente:tblCliente" value="Filtrar"></p:commandButton> 
      </h:panelGrid> 
     </f:facet> 
       #{cliente.nrCpf}     
      </p:column> 

之前,我改變了JSF的版本,每次我點擊「Filtrar」按鈕,我cadastroClienteBean的新實例將被創建。現在我已經改變了它,似乎ManagedBean並沒有每次都被實例化,但是客戶變量變爲空,儘管我在構造函數中實例化它。

public CadastroClienteBean(){ 
    cliente = new Cliente(); 
    init(); 
} 

編輯:調試了一下,我發現,過濾器的價值正在對變量和右後的setCliente()被調用,並將其設置爲null設置後,但我不知道爲什麼。

+0

您是否標記了'client'屬性'transient'?你不應該。 – BalusC

+0

不,我沒有'@ManagedBean @ViewScoped 公共類CadastroClienteBean實現Serializable { \t \t/** \t * \t */ \t私有靜態最後的serialVersionUID長= 1升; \t private列表 clientes; \t私人客戶客戶; \t \t private String valor;' –

回答

1

找出發生了什麼事情,dataTable上的selection="#{cadastroClienteBean.cliente}"屬性將客戶端設置爲null,因爲沒有選擇行。

+1

好吧,這就是您自己的代碼/測試方法中的一個錯誤;)順便說一下,在JSF 2.2中,您不應該禁用部分狀態保存來修復視圖範圍的缺陷豆每次重建。當您仍然使用JSF 2.0/2.1時,此設置僅用作「臨時解決方法」。 – BalusC

+0

是的,我通過使用另一個Cliente屬性「selectedCliente」來修復它。並刪除了部分狀態保存修復程序。謝謝。 –