Onchange no a4j:support funciona no FF e não no IE

4 respostas
bonissauro

Galera,

Tenho uma situação em que preciso solicitar ao usuário o preenchimento de um campo apenas no caso de um checkbox estar “ticado” anteriormente. Tipo, quando o checkbox estiver desmarcado, o campo não é renderizado, e esse modo on/off é dinâmico.

Tenho o codigo abaixo, que roda beleza no Firefox mas no IE, não. Atenção principalmente para do tal do onchange. Li por aí (e constatei na carne) que ele funciona apenas parcialmente no IE (digo “parcialmente” porque no navegador do Tio Bill ele tem o funcionamento idêntico ao do onblur, sendo executado somente quando o componente perde o foco), apesar de no FF tudo sair como esperado.

Aqui vai ele:

<s:decorate template="/layout/edit.xhtml" id="id1" rendered="#{manterLinhaNegocialBaseExternaController.permiteEdicao}">
            
       <ui:define name="label">Linha subordinadora:</ui:define>

       <h:selectBooleanCheckbox
                          value="#{objLinhaNegocialBaseExternaSelecionado.indicadorBooleanoLinhaSubordinadora}" 
                         disabled="#{not manterLinhaNegocialBaseExternaController.permiteEdicao}" tabindex="2"  >
							
                <a4j:support event="onchange" reRender="idAreaLinhaSubordinadora" ajaxSingle="true" />
				
       </h:selectBooleanCheckbox>
				
       <h:outputText value="Sim" />
						                
</s:decorate>

<h:panelGroup id="idAreaLinhaSubordinadora" rendered="#{manterLinhaNegocialBaseExternaController.permiteEdicao}">
					            
                  <s:decorate template="/layout/edit.xhtml" rendered="#{ (not objLinhaNegocialBaseExternaSelecionado.indicadorBooleanoLinhaSubordinadora) }">
	            
                           <ui:define name="label">Linha subordinadora:</ui:define>
	                
                                   <h:selectOneMenu 	value="#{objLinhaNegocialBaseExternaSelecionado.objLinhaSubordinadora}" >
										                        
                                         <s:selectItems 	value="#{manterLinhaNegocialBaseExternaController.listaLinhasSubordinadoras}"  var="registro" 
                                                    label="#{registro.codigoLinha}#{' '}#{registro.nome}" 
                                                    noSelectionLabel="Selecione..."/>
					    				
                                         <s:convertEntity />      
					                                                            
                                   </h:selectOneMenu>
					
                   </s:decorate>
            
</h:panelGroup>

Ressalto que já tentei mudar o onchange para onclick e onselectionchange e nada surtiu efeito.

Alguém tem alguma luz sobre o assunto?

Abraço a todos
Bonissauro

4 Respostas

Hebert_Coelho

Esse s:decorate é do richfaces?

bonissauro

Não, jakefrog. É uma tag do Seam.

Porém, acredito não ser esse o problema.

Abraço
Bonissauro

bonissauro

Aliás, aqui vou postar o código com os forms e os containers envovidos no pepino:

<h:form id="formEntrada" style="margin-left: 20px; margin-right: 20px; ">

    <a4j:region id="idRegion-do-ajax">

         <s:decorate template="/layout/edit.xhtml" id="id1" rendered="#{manterLinhaNegocialBaseExternaController.permiteEdicao}">  
                  
                <ui:define name="label">Linha subordinadora:</ui:define>  
      
                <h:selectBooleanCheckbox  
                              value="#{objLinhaNegocialBaseExternaSelecionado.indicadorBooleanoLinhaSubordinadora}"   
                             disabled="#{not manterLinhaNegocialBaseExternaController.permiteEdicao}" tabindex="2"  >  
                                  
                    <a4j:support event="onchange" reRender="idAreaLinhaSubordinadora" ajaxSingle="true" />  
                      
                </h:selectBooleanCheckbox>  
                      
                <h:outputText value="Sim" />  
                                              
         </s:decorate>  
      
         <h:panelGroup id="idAreaLinhaSubordinadora" rendered="#{manterLinhaNegocialBaseExternaController.permiteEdicao}">  
                                     
                      <s:decorate template="/layout/edit.xhtml" rendered="#{ (not objLinhaNegocialBaseExternaSelecionado.indicadorBooleanoLinhaSubordinadora) }">  
                      
                               <ui:define name="label">Linha subordinadora:</ui:define>  
                          
                                       <h:selectOneMenu  value="#{objLinhaNegocialBaseExternaSelecionado.objLinhaSubordinadora}" >  
                                                                      
                                             <s:selectItems  value="#{manterLinhaNegocialBaseExternaController.listaLinhasSubordinadoras}"  var="registro"   
                                                        label="#{registro.codigoLinha}#{' '}#{registro.nome}"   
                                                        noSelectionLabel="Selecione..."/>  
                                              
                                             <s:convertEntity />        
                                                                                      
                                       </h:selectOneMenu>  
                          
                       </s:decorate>  
                  
         </h:panelGroup>  

    </a4j:region>

    <!-- ESSE A4J:REGION É PARA QUE NAO SEJA RENDERIZADA A MENSAGEM DINAMICA "CARREGANDO", DISPARADA A CADA REQUISICAO EM AJAX -->

    <a4j:status style="text-align: right" for="idRegion-do-ajax">
            <f:facet name="start" />
    </a4j:status>

</h:form>

Agradeço muito a alguém que possa me dar uma dica.

Abraço a todos
Bonissauro

Hebert_Coelho

Desculpe mas não é aconselhável misturar componentes não viu.

Se tiver como fazer um teste, troca tudo para o mesmo componente e faz o teste.

Pq eu já vi diversos problemas assim por utilizarem componentes diferentes.

O Seam não tem ajax?

Criado 26 de janeiro de 2012
Ultima resposta 26 de jan. de 2012
Respostas 4
Participantes 2