javajsfajax4jsfjboss-seam

How to refresh all fields in a form?


I am trying to refresh all fields in a form as I click a checkbox:

            <h:selectBooleanCheckbox id="#{id}" 
                styleClass="checkbox"
                value="#{value}"
                required="#{required}" 
                disabled="#{not empty readonly and readonly ? true : disabled}"                
                onclick="showLoading();" >
                <a4j:support event="onchange" reRender="pessoaDocumentoIdentificacaoForm" oncomplete="hideLoading();" />
            </h:selectBooleanCheckbox>

The problem is pessoaDocumentoIdentificacaoForm, it's JBoss seam. All fields in this form are refreshed, except these stated at tipoDocumento value...

<components xmlns="http://jboss.com/products/seam/components"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
        http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
        http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd">

<component name="pessoaDocumentoForm" class="br.com.itx.component.Form">
            <property name="formId">pessoaDocumentoIdentificacao</property>
            <property name="fields">
            <value>nome:{required:true,type: inputTextDocumentoIdentificacao, properties : {rendered: #{not justicaTrabalho},label: 'Nome registrado neste documento'}}</value>
                <value>tipoDocumento:{type: comboPessoaTipoDocumento, required: true,
                        properties:{items: #{preCadastroPessoaBean.isPermiteEdicaoDocumentosPrincipais() ? 'tipoDocumentoIdentificacaoItems' : 'tipoDocumentoIdentificacaoSemDocumentosPrincipaisItems'}}}</value>          
                <value>usadoFalsamente: {required: false, type: sim_nao, properties: {rendered: #{not justicaTrabalho}}}</value>        
                <value>documentoPrincipal: {type: checkBoxDocumentoPrincipal, properties: {rendered: #{not justicaTrabalho}}}</value>
                <value>ativo: {required: true, type: radioSituacao}</value>     
            </property>
            <property name="buttons">gravarDocumentoPessoa</property> 
        </component>
    </components>

...the true conditional of that decision (isPermiteEdicao) redirects to these fields that a4j cannot refresh:

<component name="tipoDocumentoIdentificacaoItems" class="br.com.itx.component.SelectItemsQuery">
    <property name="ejbql">select o from TipoDocumentoIdentificacao o</property>

    <property name="restrictions">
        <value>o.tipoPessoa = #{pessoaDocumentoIdentificacaoHome.instance.pessoa.inTipoPessoa}</value>
        <value>o.tipoPessoa = #{pessoaHome.instance.inTipoPessoa}</value>
    </property>
    <property name="order">tipoDocumento</property>

Here below we can see results: I posted here images to clarify results.


Solution

  • Gotcha!

    Following this issue, I added AjaxSingle="true"to my method, like shown below:

    <a:support event="onchange" reRender="pessoaDocumentoIdentificacaoForm" oncomplete="hideLoading();" ajaxSingle="true" />