Ошибка привязки JSF 2.2 @ViewScoped?

Я читал об ошибке связывания с @ViewScoped (ОТЧЕТ ОБ ОШИБКЕ) и что это было исправлено в одной из последних версий JSF, поэтому я проверил это с 3 последними версиями JSF и попытался использовать

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

fix to solve it, but no luck.

У меня есть таблица данных 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, каждый раз, когда я нажимал кнопку «Фильтр», создавался новый экземпляр моего cadastroClienteBean. Теперь, когда я изменил его, кажется, что экземпляр ManagedBean не создается каждый раз, но переменная cliente становится нулевой, хотя я создаю ее экземпляр в конструкторе.

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

РЕДАКТИРОВАТЬ: после небольшой отладки я обнаружил, что значение фильтра устанавливается для переменной, и сразу после этого вызывается setCliente() и устанавливается значение null, но я не знаю, почему.


person Rodrigo Cavalcante    schedule 05.06.2012    source источник
comment
Вы отметили свойство client transient? Вы не должны.   -  person BalusC    schedule 05.06.2012
comment
Нет, я не @ManagedBean @ViewScoped public class CadastroClienteBean implements Serializable { /** * */ private static final long serialVersionUID = 1L; private List<Cliente> clientes; private Cliente cliente; private String valor;   -  person Rodrigo Cavalcante    schedule 05.06.2012


Ответы (1)


Выяснил, что происходит, атрибут selection="#{cadastroClienteBean.cliente}" в dataTable устанавливал для клиента значение null, поскольку не было выбрано ни одной строки.

person Rodrigo Cavalcante    schedule 05.06.2012
comment
Хорошо, таким образом, это просто ошибка в вашем собственном коде / методологии тестирования;) Кстати, с JSF 2.2 вам не нужно отключать частичное сохранение состояния, чтобы исправить ошибку реконструируемого компонента с областью видимости каждый раз. Этот параметр предназначен только в качестве временного обходного пути, когда вы все еще используете JSF 2.0/2.1. - person BalusC; 05.06.2012
comment
Да, я исправил это, используя другой атрибут Cliente selectedCliente. И удалено исправление частичного сохранения состояния. Спасибо. - person Rodrigo Cavalcante; 05.06.2012