ICEfaces
  1. ICEfaces
  2. ICE-5122

Catch-all action/actionListener on form

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.8.2
    • Fix Version/s: 1.8.2-EE-GA_P01, 1.8.3
    • Component/s: ICE-Components
    • Labels:
      None
    • Environment:
      All

      Description

      In a standard web page, or stock JSF application, if there is a form, input fields, and a submit button, and the user presses enter in one of the input fields, the form will be submitted as if the submit button has been pressed. In stock JSF applications, that results in the submit commandButton's action or actionListener being invoked. Application developers would like that capability in ICEfaces applications.

      Currently, ICEfaces intercepts all form submissions, to be able to do its own form field serialization, and bundle in ICEfaces specific submitted values. This keeps the browser's default behaviour from happening. When seeking to address user's desire of default browser behaviour, it's been noted that certain issues make it suboptimal. For example, in stock JSF applications, if there are multiple submit buttons, then there is not consistent behaviour across browsers, as to which submit button will be virtually clicked. Solving the simple case would likely break more complex cases. Furthermore, after DOM manipulation, which submit button is clicked becomes arbitrary in some browsers. There is also the question of forms with input fields, and no submit button, which is quite popular with search fields.

      Historically, ICEfaces addressed these issues by allowing applications to specify an action/actionListener on certain input fields directly, so that if ENTER was pressed in that specific input field, a precisely specified action/actionListener could be invoked. This fine grained control becomes a detriment when there are many input fields in a form, or when using multiples levels of JSP or Facelets inclusion, and the application wishes to always invoke the same action/actionListener.

      So, to complement existing behaviours, we propose adding action and actionListener attributes to ice:form, so that there may be a single place to specify the action/actionListener, regardless of the submitting component, whether it be an input field or UICommand subclass like commandButton. When any of those components cause a full form submission (not a partialSubmit), they will be given a chance to invoke their own action/actionListener, but if they have none specified, then the ice:form will invoke its own action/actionListener, if one was specified. In this way, a catch-all action/actionListener may be specified on the ice:form, which can be overridden on a per component basis.

        Activity

        Hide
        yip.ng added a comment -

        war file for demo showing form and component actions: ICE-5122-2.war

        Show
        yip.ng added a comment - war file for demo showing form and component actions: ICE-5122 -2.war
        Hide
        Adnan Durrani added a comment -

        More restricted, so the form should only take over on ActionEvent if the form component is defining either an "action" or an "actionListener".

        Modified: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\ext\HtmlForm.java
        Sending content: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\ext\HtmlForm.java
        Completed: At revision: 19881

        Show
        Adnan Durrani added a comment - More restricted, so the form should only take over on ActionEvent if the form component is defining either an "action" or an "actionListener". Modified: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\ext\HtmlForm.java Sending content: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\ext\HtmlForm.java Completed: At revision: 19881
        Hide
        Adnan Durrani added a comment -

        The following two attributes are added to the form component:

        • action
        • actionListener

        To fix this issue, the changes has been made so the form component can takeover on ActionEvent if the real source of the event doesn't provide any action or actionListener (e.g.)

        //in this example inputText will process the event, when hitting enter on inputText
        <ice:form>
        <ice:inputText actionListener="#

        {bean.textListener}" />

        //in this example again the inputText will process the event, when hitting enter on inputText
        <ice:form actionListener="#{bean.formListener}">
        <ice:inputText actionListener="#{bean.textListener}

        " />

        //in this example due to the absence of actionListener on inputText, the form will process the event, when hitting enter on inputText.
        <ice:form actionListener="#

        {bean.formListener}

        ">
        <ice:inputText />

        Please see attached demos for more detail.

        Show
        Adnan Durrani added a comment - The following two attributes are added to the form component: action actionListener To fix this issue, the changes has been made so the form component can takeover on ActionEvent if the real source of the event doesn't provide any action or actionListener (e.g.) //in this example inputText will process the event, when hitting enter on inputText <ice:form> <ice:inputText actionListener="# {bean.textListener}" /> //in this example again the inputText will process the event, when hitting enter on inputText <ice:form actionListener="#{bean.formListener}"> <ice:inputText actionListener="#{bean.textListener} " /> //in this example due to the absence of actionListener on inputText, the form will process the event, when hitting enter on inputText. <ice:form actionListener="# {bean.formListener} "> <ice:inputText /> Please see attached demos for more detail.
        Hide
        Ken Fyten added a comment -

        Reopened to correct fix version.

        Show
        Ken Fyten added a comment - Reopened to correct fix version.
        Hide
        Krashan Brahmanjara added a comment -

        This scenario

         
        //in this example again the inputText will process the event, when hitting enter on inputText
        <ice:form actionListener="#{bean.formListener}">
        <ice:inputText actionListener="#{bean.textListener}" />
        

        not works in http://anonsvn.icesoft.org/repo/icefaces/trunk/icefaces rev. 32567. Only form action listener is fired.

        Show
        Krashan Brahmanjara added a comment - This scenario //in this example again the inputText will process the event, when hitting enter on inputText <ice:form actionListener= "#{bean.formListener}" > <ice:inputText actionListener= "#{bean.textListener}" /> not works in http://anonsvn.icesoft.org/repo/icefaces/trunk/icefaces rev. 32567. Only form action listener is fired.

          People

          • Assignee:
            Unassigned
            Reporter:
            Mark Collette
          • Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: