I realize that this is a little off-topic, but I don't have any more
ideas on debugging or solving it.

I have a form with an input text (with an a4j:support to submit on
blur), a backup button (change number) with an a4j:support to submit
on click, and a second button (add) with another a4j:support to submit
on click.

When the second button is clicked, after the ajax submit, the focus
needs to go back to the input text field.
oncomplete="#{rich:element('newNumberInput')}.focus() "

That works fine in Firefox.   The inputText gets focus.
In Internet Explorer (6, 7, 8), the first button is semi-highlighted
(but not focused), leaving the page with no component focused.

Obviously an ie bug, but any ideas on a workaround?

I'm posting a simplified example which demonstrates the problem,
although the problem seems clear enough.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html>
  <body>
<!-- Text above this line is ignored -->
    <ui:composition
     xmlns="http://www.w3.org/1999/xhtml";
     xmlns:ui="http://java.sun.com/jsf/facelets";
     xmlns:jstl="http://java.sun.com/jsp/jstl/functions";
     xmlns:h="http://java.sun.com/jsf/html";
     xmlns:f="http://java.sun.com/jsf/core";
     xmlns:a4j="http://richfaces.org/a4j";
     xmlns:rich="http://richfaces.org/rich";>

  <ui:param name="page" value="#{testBeanRefocusAfterAjaxSubmitBean}"/>

                <h:form id="myForm">

        <h:panelGroup id="entirePage">
                

                                                        <a4j:region 
id="changeNumberForm">
                                        <h:inputText id="newNumberInput"
                                                 required="true"
                                                 value="#{page.newNumber}">
                                                                        
<a4j:support id="newNumberInputA4J"
                                                                                
event="onblur"
                                                                                
onsubmit="if (#{rich:element('newNumberInput')}.value == '')
return false"
                                                                                
actionListener="#{page.changeNumber}"
                                                                                
disableDefault="true"
                                                                                
 />
                                        </h:inputText>
                                        <h:commandButton id="changeNumberButton"
                                                                        
tabindex="-1"
                                                value="Change Number">
                                                <a4j:support 
id="changeNumberButtonA4J"
                                                        event="onclick"
                                                        
actionListener="#{page.changeNumber}"
                                                        disableDefault="true"
                                                        />
                                        </h:commandButton>
                                </a4j:region>

                                                        <h:commandButton 
id="addButton"
                                                                value="Add">
                                                                <a4j:support 
id="addButtonA4J"
                                                                        
event="onclick"
                                                                        
oncomplete="#{rich:element('newNumberInput')}.focus() "
                                                                        
actionListener="#{page.add}"
                                                                        
disableDefault="true"
                                                                        
reRender="entirePage" />
                                                        </h:commandButton>

                </h:panelGroup>

                </h:form>

    </ui:composition>

<!-- Text below this line is ignored -->
  </body>
</html>




import javax.faces.event.ActionEvent;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TestBeanRefocusAfterAjaxSubmit {
        protected static final Log log =
LogFactory.getLog(TestBeanRefocusAfterAjaxSubmit.class);
        
        transient private String newNumber;

        public String getNewNumber() {
                return newNumber;
        }
        public void setNewNumber(String newNumber) {
                this.newNumber = newNumber;
        }
        
        // ActionListeners

        public void changeNumber(ActionEvent event) {
                log.info("changeNumber");
        }

        public void add(ActionEvent event) {
                log.info("add");
        }
}

Reply via email to