9 Replies Latest reply on May 25, 2012 10:03 AM by atarifreak73

    a4j:commandLink action on second click - again

    atarifreak73

      I know, there exists by now many many threads and posts in many communitys, and I have reseachred many days, but I found not the accurate solution. I have reduced the problem to the following codelines:

       

      test_a.xhtml:

       

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html
              PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:a4j="http://richfaces.org/a4j"
            xml:lang="en" lang="en"
            xmlns:h="http://java.sun.com/jsf/html">
      <h:head />
      <h:body>
          <h:form id="frm_a">
              <h:outputText value="= A =" />
              <h:panelGrid columns="1">
                  <h:column><a4j:commandLink action="to_c" execute="@this">
                      <h:outputText value="zu C" />
                  </a4j:commandLink></h:column>
                  <h:column><a4j:commandLink action="to_b" execute="@this">
                      <h:outputText value="zu B" />
                  </a4j:commandLink></h:column>
              </h:panelGrid>
          </h:form>
      </h:body>
      </html>
      
      

       

      2. Code:

      test_b.xhtml:

       

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html
              PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:a4j="http://richfaces.org/a4j"
            xml:lang="en" lang="en"
            xmlns:h="http://java.sun.com/jsf/html">
      <h:head />
      <h:body>
          <h:form>
              <h:outputText value="= B =" />
              <h:panelGrid columns="1">
                  <h:column><a4j:commandLink action="to_c" execute="@this">
                      <h:outputText value="zu C" />
                  </a4j:commandLink></h:column>
                  <h:column><a4j:commandLink action="to_a" execute="@this">
                      <h:outputText value="zu A" />
                  </a4j:commandLink></h:column>
              </h:panelGrid>
          </h:form>
      </h:body>
      </html>
      

       

      test_c.xhtml:

       

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html
              PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:a4j="http://richfaces.org/a4j"
            xml:lang="en" lang="en"
            xmlns:h="http://java.sun.com/jsf/html">
      <h:head />
      <h:body>
          <h:form>
              <h:outputText value="= C =" />
              <h:panelGrid columns="1">
                  <h:column><a4j:commandLink action="to_a" execute="@this">
                      <h:outputText value="zu A" />
                  </a4j:commandLink></h:column>
                  <h:column><a4j:commandLink action="to_b" execute="@this">
                      <h:outputText value="zu B" />
                  </a4j:commandLink></h:column>
              </h:panelGrid>
          </h:form>
      </h:body>
      </html>
      
      

       

      a part of faces-config.xml:

       

      ...   
      
      <navigation-rule>
              <from-view-id>/test_a.xhtml</from-view-id>
              <navigation-case>
                  <from-outcome>to_b</from-outcome>
                  <to-view-id>/test_b.xhtml</to-view-id>
              </navigation-case>
              <navigation-case>
                  <from-outcome>to_c</from-outcome>
                  <to-view-id>/test_c.xhtml</to-view-id>
              </navigation-case>
          </navigation-rule>
      
      ...

       

      When I click to the navigationlinks, sometimes I must click several times to navigate to the desired page. It´s also by using actions in the managed beans. The first click wood be mostly ignored, but not always.

      I´m using:
      - JBoss 6.1 (with included JSF 2.0.3)
      - Richfaces 4.2.2

       

      I´m so thankful for any solutions!

        • 1. Re: a4j:commandLink action on second click - again
          atarifreak73

          The first click after the first Site works always.

           

          For instance I call the URL: http://localhost:8080/lm/test_a.jsf all navigationlinks from test_a.xhtml are working. But when I navigate along to B or C, then I have the problem with the second click.

          • 2. Re: a4j:commandLink action on second click - again
            atarifreak73

            Have anyone a idea?

            Is it ambiguous what I mean?

             

            Thank You for any answers.

            • 3. Re: a4j:commandLink action on second click - again
              ssilvert

              Hi,

               

              I've moved your thread to the RichFaces forum.  I think you'll have better luck with a4j questions here.

               

              Stan

              • 4. Re: a4j:commandLink action on second click - again
                healeyb

                In JSF 2 the navigation-rules in faces-config are optional as implicit navigation was introduced. You can just have

                action="test_a" and it will navigate to test_a.xhtml, with nothing added to faces-config. I'm not sure if this will

                help but it' worth a try, your code looks ok to me. What is the value of STATE_SAVING_METHOD in web.xml?

                 

                Also what is the scope of your backing bean? If you are using @RequestScoped can you try @ViewScoped?

                 

                Edit: what you're possibly seeing is that the page IS changing, but the URL in the browser window is one step

                behind. You can use action="test_a?faces-redirect=true".

                 

                Regards,

                Brendan.

                 

                See also: http://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is-not-being-invoked/2120183#2120183

                • 5. Re: a4j:commandLink action on second click - again
                  atarifreak73

                  Thank You for your answer!

                   

                  I know, before I use the navigation-tules, I used the automatic navigation with the direct string "test_a". I thought, the navigation-rule solved the problem.

                   

                  The workarround with "faces-redirect=true" I haved tested, but this not fixed my problem.

                  The problem is, the content of the page changed on the second click. I have no preference, how the url looks. I have before used a managed bean with action-Methods, my original method. There I have also the problem, the actionmethod executed on the second click. My beans have sessionscope.

                   

                  The STATE_SAVING_METHOD I have switched to server or client with no difference.

                   

                  Here my web-xml:

                   

                  <?xml version="1.0" encoding="UTF-8"?>
                  <web-app xmlns="http://java.sun.com/xml/ns/javaee"
                             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                             version="2.5">
                      <servlet>
                          <servlet-name>Faces Servlet</servlet-name>
                          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
                          <load-on-startup>1</load-on-startup>
                      </servlet>
                      <servlet-mapping>
                          <servlet-name>Faces Servlet</servlet-name>
                          <url-pattern>*.faces</url-pattern>
                          <url-pattern>*.jsf</url-pattern>
                      </servlet-mapping>
                      <context-param>
                          <param-name>facelets.SKIP_COMMENTS</param-name>
                          <param-value>true</param-value>
                      </context-param>
                      <context-param>
                          <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
                          <param-value>false</param-value>
                      </context-param>
                      <context-param>
                          <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
                          <param-value>client</param-value>
                      </context-param>
                      <context-param>
                          <param-name>javax.faces.PROJECT_STAGE</param-name>
                          <param-value>Development</param-value>
                      </context-param>
                      <error-page>
                          <exception-type>javax.faces.application.ViewExpiredException</exception-type>
                          <location>/timeout.jsf?faces-redirect=true</location>
                      </error-page>
                  </web-app>
                  
                  
                  • 6. Re: a4j:commandLink action on second click - again
                    healeyb

                    Hmmm, it's never easy is it. For webkit based browsers like chrome you need to use an f:view tag like this:

                     

                    ...

                    <f:view contentType="text/html">

                      <h:head>

                      </h:head>

                      <h:body>

                      </h:body>

                    </f:view>

                    ...

                     

                    Perhaps add a messages component - I don't see anything that would cause a validation error, although the

                    cursed 'nested form' error could be produced because you have PROJECT_STAGE set to Development, can

                    you try Production?

                     

                    <a4j:outputPanel ajaxRendered="true">

                      <h:messages/>

                    </a4j:outputPanel>

                     

                    Also, keep an eye out for any javascript errors in the browser javascript console. A real long shot and I'm not

                    sure if I'm imagining it or not, but deep in the recesses of my memory is the idea that I've seen a bug report

                    related to an empty h:head section, can you put something in there like:

                     

                    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

                     

                    My final suggestion would be to upgrade JSF, 2.1.8 is just out and there've been hundreds of fixes since 2.0.3.

                     

                    Regards,

                    Brendan.

                    • 7. Re: a4j:commandLink action on second click - again
                      atarifreak73

                      The source for a (the others are similar):

                       

                      <?xml version="1.0" encoding="UTF-8"?>
                      <!DOCTYPE html
                              PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml"
                            xmlns:a4j="http://richfaces.org/a4j" xmlns:f="http://java.sun.com/jsf/core"
                            xml:lang="en" lang="en"
                            xmlns:h="http://java.sun.com/jsf/html">
                      <f:view contentType="text/html">
                      <h:head>
                          <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
                      </h:head>
                      <h:body>
                          <h:form id="frm_a">
                              <h:outputText value="= A =" />
                              <h:panelGrid columns="1">
                                  <h:column><a4j:commandLink action="to_c" execute="@this">
                                      <h:outputText value="zu C" />
                                  </a4j:commandLink></h:column>
                                  <h:column><a4j:commandLink action="to_b" execute="@this">
                                      <h:outputText value="zu B" />
                                  </a4j:commandLink></h:column>
                              </h:panelGrid>
                              <a4j:outputPanel ajaxRendered="true">
                                  <h:messages />
                              </a4j:outputPanel>
                          </h:form>
                      </h:body>
                      </f:view>
                      </html>
                      
                      

                       

                      I have upgraded to JSF 2.1.8 with no other result. (Is it enough to integrate the javax.faces-2.1.8.jar in WEB-INF\lib?) I have switched to JBoss 5.1, it´s the same.

                      I have testet with h:commandLink, and it runs perfecty, but I need a4j:commandLink

                      When I use a4j:commandLink in mix with h:commandLinks in

                       

                      my Projects, also the h:commandLinks sometimes response on second click.

                       

                      I suppose, there is anywhere an error, probable a simple error, but I can find them!

                      • 8. Re: a4j:commandLink action on second click - again
                        healeyb

                        I'm a glassfish user so unable to comment on Jboss AS. Perhaps worth posting a summary of this in www.stackoverflow.com

                        and make sure you tag the question with JSF, and perhaps include the text "@BalusC".

                        • 9. Re: a4j:commandLink action on second click - again
                          atarifreak73

                          Anyway thank You for Your effort

                           

                          I think, a4j:commandLink is improper to use as Navigationlink. My problem is, my links must be all in one: In case of the action, they must navigate to another page or produce a popup for detailquestions (and then navigate to another page) with ajax content.

                          In the moment it works, but I dont know, what I can do, when this problem comes again.

                           

                          In richfaces absence a attribute, in this I can say ambiguous, what the returned value is, either a id for rendering or a jsf-page. In the second case the a4j:commandLink will works as h:commandLink. At the moment it could be a problem, when a a4j:commandLink works outside his form.