MyFaces Core
  1. MyFaces Core
  2. MYFACES-1365

h:selectOneMenu - Phase processing broken for the first selectOneMenu when using 2 of them.

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: 1.1.3
    • Fix Version/s: 1.1.3
    • Component/s: None
    • Labels:
      None
    • Environment:
      tomcat 5.5.17, java 1.5

      Description

      Using two selectOneMenu on one page results in a broken phase processing.

      example:

      Works:

      <html>
      <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
      <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
      <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
      <%@include file="../inc/head.jsp"%>
      <body>
      <f:view>
      <h:form>
      <f:loadBundle basename="my.examples.ressources.messages" var="msgs" />
      <h:selectOneMenu id="oneoption" value="#

      {tableData.rows}"
      onchange="submit()" valueChangeListener="#{tableData.rowsChanged}"
      immediate="true">
      <f:selectItem itemValue="5" itemLabel="5" />
      <f:selectItem itemValue="10" itemLabel="10" />
      <f:selectItem itemValue="15" itemLabel="15" />
      <f:selectItem itemValue="20" itemLabel="20" />
      </h:selectOneMenu>
      </h:form>
      </f:view>
      <%@include file="../inc/page_footer.jsp"%>
      </body>
      </html>

      doesnt work:

      <html>
      <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
      <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
      <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
      <%@include file="../inc/head.jsp"%>
      <body>
      <f:view>
      <h:form>
      <f:loadBundle basename="my.examples.ressources.messages" var="msgs" />
      <h:selectOneMenu id="oneoption" value="#{tableData.rows}

      "
      onchange="submit()" valueChangeListener="#

      {tableData.rowsChanged}

      "
      immediate="true">
      <f:selectItem itemValue="5" itemLabel="5" />
      <f:selectItem itemValue="10" itemLabel="10" />
      <f:selectItem itemValue="15" itemLabel="15" />
      <f:selectItem itemValue="20" itemLabel="20" />
      </h:selectOneMenu>
      <h:selectOneMenu value="#

      {tableData.country}

      " onchange="submit()">
      <f:valueChangeListener
      type="my.examples.sortabletable.CountryListener" />
      <f:selectItems value="#

      {tableData.countryNames}

      " />
      </h:selectOneMenu>
      </h:form>
      </f:view>
      <%@include file="../inc/page_footer.jsp"%>
      </body>
      </html>

      Using the first one, the event gets fired and looking at the phase listener, all 6 phases are processed.
      Using the second example with both menus and firing an event on the first menu, application invoke and model update phase aren't executed.
      The second menu works fine

      Only happens after the bean is new - using it on a already created session bean, works. Only after the first invoking of the view this happens.

      I don't see any cause why the first event should not process phase 4 and 5 ( like it does when only one menu is used ), so imho it's a bug.

      kind regards

      Torsten

        Activity

        Hide
        Torsten Krah added a comment -

        Verified that dataScroller links ( pages ) are also broken for the first time they are called.

        kind regards

        Show
        Torsten Krah added a comment - Verified that dataScroller links ( pages ) are also broken for the first time they are called. kind regards
        Hide
        Mike Kienenberger added a comment -

        You've set the selectOne to immediate=true.

        This short-circuits the phases by definition, executing no validation, updateModel, or invokeApplication phase.

        So yes, it's working just as expected.

        Show
        Mike Kienenberger added a comment - You've set the selectOne to immediate=true. This short-circuits the phases by definition, executing no validation, updateModel, or invokeApplication phase. So yes, it's working just as expected.
        Hide
        Torsten Krah added a comment -

        Yo are wrong.

        Look at http://wiki.apache.org/myfaces/How_The_Immediate_Attribute_Works:

        Their you can read:

        ...
        The only data available on a non-immediate component is what is fetched with component.getSubmittedValue(). Also, trying to change any backing bean value or component value is likely to be overwritten when the non-immediate value goes through validation and update model. And if any non-immediate component fails validation, then no backing bean updates will be performed.

        On the other hand, any UIInput component marked immediate will already be validated before the action. If the validation failed for an immediate component, then the immediate action will not be executed, and no validation or model updates will occur for non-immediate components.
        ...

        And if you read carefully - its only on the first event, the others do fine - with this "missing phases" for the first one. If you are right, than it should never behave so, that for all events after the first it works with these missing phases, than it would be also a bug.

        And - you can delete the immidiate or set it to false. -> Bug is still there - so its not immediate="true" related.

        Please reopen!

        kind regards

        Torsten

        Show
        Torsten Krah added a comment - Yo are wrong. Look at http://wiki.apache.org/myfaces/How_The_Immediate_Attribute_Works: Their you can read: ... The only data available on a non-immediate component is what is fetched with component.getSubmittedValue(). Also, trying to change any backing bean value or component value is likely to be overwritten when the non-immediate value goes through validation and update model. And if any non-immediate component fails validation, then no backing bean updates will be performed. On the other hand, any UIInput component marked immediate will already be validated before the action. If the validation failed for an immediate component, then the immediate action will not be executed, and no validation or model updates will occur for non-immediate components. ... And if you read carefully - its only on the first event, the others do fine - with this "missing phases" for the first one. If you are right, than it should never behave so, that for all events after the first it works with these missing phases, than it would be also a bug. And - you can delete the immidiate or set it to false. -> Bug is still there - so its not immediate="true" related. Please reopen! kind regards Torsten
        Hide
        Torsten Krah added a comment -

        Reopened, see last comment.

        kind regards

        Show
        Torsten Krah added a comment - Reopened, see last comment. kind regards
        Hide
        Mike Kienenberger added a comment -

        Torsten,

        Can you repost your phase results when running this with no components marked immediate?

        Show
        Mike Kienenberger added a comment - Torsten, Can you repost your phase results when running this with no components marked immediate?
        Hide
        Mike Kienenberger added a comment -

        Also, what happens if you put a submit button on your form? Does this change the behavior?

        Show
        Mike Kienenberger added a comment - Also, what happens if you put a submit button on your form? Does this change the behavior?
        Hide
        Torsten Krah added a comment -

        browse test1.faces first:

        14.07.2006 17:31:48 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RESTORE_VIEW(1)
        14.07.2006 17:31:48 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RESTORE_VIEW(1)
        14.07.2006 17:31:48 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RENDER_RESPONSE(6)
        14.07.2006 17:31:49 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RENDER_RESPONSE(6)

        click on selectmenu, choose a value:

        14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RESTORE_VIEW(1)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RESTORE_VIEW(1)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE APPLY_REQUEST_VALUES(2)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER APPLY_REQUEST_VALUES(2)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE PROCESS_VALIDATIONS(3)
        14.07.2006 17:32:52 my.examples.sortabletable.TableData rowsChanged
        INFO: value changed event: 5
        14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER PROCESS_VALIDATIONS(3)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE UPDATE_MODEL_VALUES(4)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER UPDATE_MODEL_VALUES(4)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE INVOKE_APPLICATION(5)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER INVOKE_APPLICATION(5)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RENDER_RESPONSE(6)
        14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RENDER_RESPONSE(6)

        now test2.faces - clear cookies, browse it:

        14.07.2006 17:33:23 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RESTORE_VIEW(1)
        14.07.2006 17:33:23 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RESTORE_VIEW(1)
        14.07.2006 17:33:23 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RENDER_RESPONSE(6)
        14.07.2006 17:33:23 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RENDER_RESPONSE(6)

        now change value like in test1.faces:

        14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RESTORE_VIEW(1)
        14.07.2006 17:33:53 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RESTORE_VIEW(1)
        14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE APPLY_REQUEST_VALUES(2)
        14.07.2006 17:33:53 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER APPLY_REQUEST_VALUES(2)
        14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE PROCESS_VALIDATIONS(3)
        14.07.2006 17:33:53 my.examples.sortabletable.TableData rowsChanged
        INFO: value changed event: 5
        14.07.2006 17:33:53 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER PROCESS_VALIDATIONS(3)
        14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RENDER_RESPONSE(6)
        14.07.2006 17:33:54 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RENDER_RESPONSE(6)

        change it a second time:

        14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RESTORE_VIEW(1)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RESTORE_VIEW(1)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE APPLY_REQUEST_VALUES(2)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER APPLY_REQUEST_VALUES(2)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE PROCESS_VALIDATIONS(3)
        14.07.2006 17:34:14 my.examples.sortabletable.TableData rowsChanged
        INFO: value changed event: 15
        14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER PROCESS_VALIDATIONS(3)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE UPDATE_MODEL_VALUES(4)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER UPDATE_MODEL_VALUES(4)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE INVOKE_APPLICATION(5)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER INVOKE_APPLICATION(5)
        14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase
        INFO: BEFORE RENDER_RESPONSE(6)
        14.07.2006 17:34:15 my.examples.util.PhaseTracker afterPhase
        INFO: AFTER RENDER_RESPONSE(6)

        Like you can see, for the first event their are phases missing.
        Using a submit button instead of onchange=submit() results in the same workflow like test2.faces.

        kind regards

        Torsten

        Show
        Torsten Krah added a comment - browse test1.faces first: 14.07.2006 17:31:48 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RESTORE_VIEW(1) 14.07.2006 17:31:48 my.examples.util.PhaseTracker afterPhase INFO: AFTER RESTORE_VIEW(1) 14.07.2006 17:31:48 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RENDER_RESPONSE(6) 14.07.2006 17:31:49 my.examples.util.PhaseTracker afterPhase INFO: AFTER RENDER_RESPONSE(6) click on selectmenu, choose a value: 14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RESTORE_VIEW(1) 14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase INFO: AFTER RESTORE_VIEW(1) 14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase INFO: BEFORE APPLY_REQUEST_VALUES(2) 14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase INFO: AFTER APPLY_REQUEST_VALUES(2) 14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase INFO: BEFORE PROCESS_VALIDATIONS(3) 14.07.2006 17:32:52 my.examples.sortabletable.TableData rowsChanged INFO: value changed event: 5 14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase INFO: AFTER PROCESS_VALIDATIONS(3) 14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase INFO: BEFORE UPDATE_MODEL_VALUES(4) 14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase INFO: AFTER UPDATE_MODEL_VALUES(4) 14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase INFO: BEFORE INVOKE_APPLICATION(5) 14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase INFO: AFTER INVOKE_APPLICATION(5) 14.07.2006 17:32:52 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RENDER_RESPONSE(6) 14.07.2006 17:32:52 my.examples.util.PhaseTracker afterPhase INFO: AFTER RENDER_RESPONSE(6) now test2.faces - clear cookies, browse it: 14.07.2006 17:33:23 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RESTORE_VIEW(1) 14.07.2006 17:33:23 my.examples.util.PhaseTracker afterPhase INFO: AFTER RESTORE_VIEW(1) 14.07.2006 17:33:23 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RENDER_RESPONSE(6) 14.07.2006 17:33:23 my.examples.util.PhaseTracker afterPhase INFO: AFTER RENDER_RESPONSE(6) now change value like in test1.faces: 14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RESTORE_VIEW(1) 14.07.2006 17:33:53 my.examples.util.PhaseTracker afterPhase INFO: AFTER RESTORE_VIEW(1) 14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase INFO: BEFORE APPLY_REQUEST_VALUES(2) 14.07.2006 17:33:53 my.examples.util.PhaseTracker afterPhase INFO: AFTER APPLY_REQUEST_VALUES(2) 14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase INFO: BEFORE PROCESS_VALIDATIONS(3) 14.07.2006 17:33:53 my.examples.sortabletable.TableData rowsChanged INFO: value changed event: 5 14.07.2006 17:33:53 my.examples.util.PhaseTracker afterPhase INFO: AFTER PROCESS_VALIDATIONS(3) 14.07.2006 17:33:53 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RENDER_RESPONSE(6) 14.07.2006 17:33:54 my.examples.util.PhaseTracker afterPhase INFO: AFTER RENDER_RESPONSE(6) change it a second time: 14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RESTORE_VIEW(1) 14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase INFO: AFTER RESTORE_VIEW(1) 14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase INFO: BEFORE APPLY_REQUEST_VALUES(2) 14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase INFO: AFTER APPLY_REQUEST_VALUES(2) 14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase INFO: BEFORE PROCESS_VALIDATIONS(3) 14.07.2006 17:34:14 my.examples.sortabletable.TableData rowsChanged INFO: value changed event: 15 14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase INFO: AFTER PROCESS_VALIDATIONS(3) 14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase INFO: BEFORE UPDATE_MODEL_VALUES(4) 14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase INFO: AFTER UPDATE_MODEL_VALUES(4) 14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase INFO: BEFORE INVOKE_APPLICATION(5) 14.07.2006 17:34:14 my.examples.util.PhaseTracker afterPhase INFO: AFTER INVOKE_APPLICATION(5) 14.07.2006 17:34:14 my.examples.util.PhaseTracker beforePhase INFO: BEFORE RENDER_RESPONSE(6) 14.07.2006 17:34:15 my.examples.util.PhaseTracker afterPhase INFO: AFTER RENDER_RESPONSE(6) Like you can see, for the first event their are phases missing. Using a submit button instead of onchange=submit() results in the same workflow like test2.faces. kind regards Torsten
        Hide
        Mike Kienenberger added a comment -

        What is the scope of tableData?

        Show
        Mike Kienenberger added a comment - What is the scope of tableData?
        Hide
        Torsten Krah added a comment -

        <managed-bean>
        <managed-bean-name>tableData</managed-bean-name>
        <managed-bean-class>
        my.examples.sortabletable.TableData</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>

        kind regards

        Show
        Torsten Krah added a comment - <managed-bean> <managed-bean-name>tableData</managed-bean-name> <managed-bean-class> my.examples.sortabletable.TableData</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> kind regards
        Hide
        Torsten Krah added a comment -

        Got some interesting news - found facestraces project and attatched it.

        For the first event at test2.faces, the validation phase fails and update + application phase arent executed, which is right if validation phase is failing.
        The validation failed - because, i don't know - thats what i have to find out, but so this bug is invalid, thx for help, i'll report why it fails for the first time.

        kind regards

        Torsten

        Show
        Torsten Krah added a comment - Got some interesting news - found facestraces project and attatched it. For the first event at test2.faces, the validation phase fails and update + application phase arent executed, which is right if validation phase is failing. The validation failed - because, i don't know - thats what i have to find out, but so this bug is invalid, thx for help, i'll report why it fails for the first time. kind regards Torsten
        Hide
        Mike Kienenberger added a comment -

        Invalid

        Show
        Mike Kienenberger added a comment - Invalid

          People

          • Assignee:
            Unassigned
            Reporter:
            Torsten Krah
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development