ICEfaces
  1. ICEfaces
  2. ICE-8498

New icecore:defaultAction component

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-3.0.0.GA, 3.1
    • Fix Version/s: 3.3
    • Component/s: Bridge, Framework
    • Labels:
      None
    • Environment:
      ICEfaces

      Description

      Create a component which will allow to control which command to initiate form submit when enter key is pressed.

      For example such component will allow to execute button#2 by default when a user hit Enter:

      <h:form id="form">
      ...
          <h:commandButton value="Ajax button" id="button1" actionListener="#{sampleBean.ajaxSubmit}">
               <f:ajax execute="@this" render="@form">
          <h:commandButton>
          <h:commandButton value="Regular Button" id="button2" action="#{sampleBean.nonAjaxSubmit}" />

          <ace:defaultAction target="#{someEL_poinitng_to_button2}" />
      ...
      </h:form>

      The component could also support more keys in addition to Enter.

      Example:
      <h:form id="form">
      ...
      <f:ajax execute="@this" render="@form">
          <h:commandButton value="Submit" id="button1" actionListener="#{sampleBean.ajaxSubmit}"/>
          <h:commandButton value="Cancel" id="button2" action="#{sampleBean.nonAjaxSubmit}" />
      <f:ajax/>

          <ace:defaultAction target="button1" key="Enter"/>
          <ace:defaultAction target="button2" key="Esc"/>
      ...
      </h:form>

        Activity

        Hide
        Ken Fyten added a comment -

        This likely should be an icecore: component.

        Show
        Ken Fyten added a comment - This likely should be an icecore: component.
        Hide
        Mircea Toma added a comment -

        Introduced new DefaultAction component. Modified FormSubmit system event listener to provide a key code – element id mapping when enhancing the form for capturing key presses. Modified bridge to read the mapping in ice.captureEnterKey and submit form when key code matches one of the mappings.

        Show
        Mircea Toma added a comment - Introduced new DefaultAction component. Modified FormSubmit system event listener to provide a key code – element id mapping when enhancing the form for capturing key presses. Modified bridge to read the mapping in ice.captureEnterKey and submit form when key code matches one of the mappings.
        Hide
        Mircea Toma added a comment -

        Renamed ice.captureEnterKey to ice.captureKeypress.

        Show
        Mircea Toma added a comment - Renamed ice.captureEnterKey to ice.captureKeypress.
        Hide
        Mircea Toma added a comment -

        Added the following key mappings: "Enter", "Esc", "Space", "Page Up", "Page Down", "Page Up", "Left arrow", "Up arrow", "Right arrow", "Down arrow", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12".

        Show
        Mircea Toma added a comment - Added the following key mappings: "Enter", "Esc", "Space", "Page Up", "Page Down", "Page Up", "Left arrow", "Up arrow", "Right arrow", "Down arrow", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12".
        Hide
        Mircea Toma added a comment -

        The component can be used in within a form to capture a certain key press. Multiple icecore:defaultAction instances can be used to capture different keypresses.

        Usage:

        <h:form id="form"> 
        ... 
            <icecore:defaultAction actionListener="#{sampleBean.update}" key="Enter"/> 
            <icecore:defaultAction action="#{sampleBean.cancel}" key="Esc"/> 
            <icecore:defaultAction action="#{helpBean.help}" key="F1"/> 
        ... 
        </h:form>
        
        Show
        Mircea Toma added a comment - The component can be used in within a form to capture a certain key press. Multiple icecore:defaultAction instances can be used to capture different keypresses. Usage: <h:form id= "form" > ... <icecore:defaultAction actionListener= "#{sampleBean.update}" key= "Enter" /> <icecore:defaultAction action= "#{sampleBean.cancel}" key= "Esc" /> <icecore:defaultAction action= "#{helpBean.help}" key= "F1" /> ... </h:form>
        Hide
        Mark Collette added a comment -

        It would be good if the individual key names did not have spaces, so that the key property could take a space delimited list of keys that would trigger the action/actionListener. This way apps can choose between using different defaultAction components with different actionListener(s) versus one defaultAction with one actionListener that itself looks in the request parameter map to determine which key was pressed and act accordingly.

        Show
        Mark Collette added a comment - It would be good if the individual key names did not have spaces, so that the key property could take a space delimited list of keys that would trigger the action/actionListener. This way apps can choose between using different defaultAction components with different actionListener(s) versus one defaultAction with one actionListener that itself looks in the request parameter map to determine which key was pressed and act accordingly.
        Hide
        Mircea Toma added a comment - - edited

        Modified key names made of two words to not have spaces and always use camel case. So now the keys names look like this: PageUp, PageDown, ....., LeftArrow.

        As far as multiple key mappings wired to the same action/actionListener, this already can be done:

        <h:form id="form"> 
        ... 
            <icecore:defaultAction actionListener="#{sampleBean.update}" key="Enter"/> 
            <icecore:defaultAction actionListener="#{sampleBean.update}" key="Esc"/> 
            <icecore:defaultAction actionListener="#{sampleBean.update}" key="LeftArrow"/> 
        ...
        </h:form>
        

        It might not be as terse as the suggested approach but acceptable in those rare cases where needed.

        Show
        Mircea Toma added a comment - - edited Modified key names made of two words to not have spaces and always use camel case. So now the keys names look like this: PageUp, PageDown, ....., LeftArrow. As far as multiple key mappings wired to the same action/actionListener, this already can be done: <h:form id= "form" > ... <icecore:defaultAction actionListener= "#{sampleBean.update}" key= "Enter" /> <icecore:defaultAction actionListener= "#{sampleBean.update}" key= "Esc" /> <icecore:defaultAction actionListener= "#{sampleBean.update}" key= "LeftArrow" /> ... </h:form> It might not be as terse as the suggested approach but acceptable in those rare cases where needed.

          People

          • Assignee:
            Mircea Toma
            Reporter:
            Evgheni Sadovoi
          • Votes:
            4 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: