ICEfaces
  1. ICEfaces
  2. ICE-7321

Generator: avoid using client ids for state saving

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.1-Beta
    • Fix Version/s: 2.1-Beta2, 3.0
    • Component/s: ACE-Components
    • Labels:
      None
    • Environment:
      Any
    • Assignee Priority:
      P1

      Description

      Currently, the generated getter and setter methods use the client id of the component as a key to a map stored in the StateHelper to store values. The purpose of this is to differentiate among instances inside UIData, ui:repeat, etc. Using the client id leads to problems when building component programmatically or from a model, as in the case of the menu component. The problem is that the client id is tried to be determined when creating the component object, but since the component object is not yet attached to the component tree, the client ids turn out to be wrong in the rendered page. It is necessary to implement a different approach to save the component values without requiring to determine the client id at the moment of setting values that would still be able to differentiate among different instances of the same component in UIData, etc.

        Activity

        Arturo Zambrano created issue -
        Arturo Zambrano made changes -
        Field Original Value New Value
        Assignee Arturo Zambrano [ artzambrano ]
        Repository Revision Date User Message
        ICEsoft Public SVN Repository #25910 Wed Oct 12 16:12:56 MDT 2011 art.zambrano ICE-7321 removed StateSavingIdGenerator class
        Files Changed
        Commit graph DEL /icefaces2/trunk/icefaces/core/src/main/java/org/icefaces/impl/component/StateSavingIdGenerator.java
        Ken Fyten made changes -
        Salesforce Case []
        Fix Version/s 2.1 [ 10241 ]
        Assignee Priority P1
        Hide
        Arturo Zambrano added a comment -

        The idea of avoiding the use of client ids in the generator for state saving has now been abandoned in favor for a simpler solution.

        Initially, an alternative approach was implemented where, instead of client ids, a generic numeric id was used. While, this temporarily solved the problem that originated this issue (ICE-7302), it could cause problems when a component is repeated inside a UIData container or ui:repeat. Therefore, this change was reverted and a simpler solution was implemented to avoid using client ids when setting properties of programmatically-generated components, in general, not just menus.

        The approach consists in checking if the component is attached to the component tree or if it is disconnected. If it is disconnected, then no client ids will be used as keys for state saving, and instead, the same approach used when setting a property during the Render Response or Restore View phases is applied, which consists in setting the default values of the component. There is no intrinsic differentiation among instances of the same component in this scenario, but since the components are already created programmatically in the bean on a per-instance basis, then there's no need to handle different instances in the setter methods in this case.

        Show
        Arturo Zambrano added a comment - The idea of avoiding the use of client ids in the generator for state saving has now been abandoned in favor for a simpler solution. Initially, an alternative approach was implemented where, instead of client ids, a generic numeric id was used. While, this temporarily solved the problem that originated this issue ( ICE-7302 ), it could cause problems when a component is repeated inside a UIData container or ui:repeat. Therefore, this change was reverted and a simpler solution was implemented to avoid using client ids when setting properties of programmatically-generated components, in general, not just menus. The approach consists in checking if the component is attached to the component tree or if it is disconnected. If it is disconnected, then no client ids will be used as keys for state saving, and instead, the same approach used when setting a property during the Render Response or Restore View phases is applied, which consists in setting the default values of the component. There is no intrinsic differentiation among instances of the same component in this scenario, but since the components are already created programmatically in the bean on a per-instance basis, then there's no need to handle different instances in the setter methods in this case.
        Arturo Zambrano made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Ken Fyten made changes -
        Fix Version/s 2.1-Beta2 [ 10294 ]
        Repository Revision Date User Message
        ICEsoft Public SVN Repository #26436 Fri Nov 18 10:04:23 MST 2011 ken.fyten ICE-6112 added code for generating faces-config.xml entries for behaviors; adjusted ajax and animation tag handlers to these changes
        ICE-6884 : When ACE component in iterative container, setting ace property during render affects all rows
        ICE-6849 : @Field of type List not generating
        ICE-6394 modifications to remove reference to AnimationBehaviour in hardcoded FacesConfigBuilder. It is now part of the faces-confix.xml to be merged
        ICE-6934 modified generator to accept parameters for short name and namespace in the build script
        ICE-7299 : Generator generates wrong attribute name with the for attribute
        ICE-7348 : ACE generator stores null values that JSF state saving can not handle
        ICE-7321 Added checking in setters to see if the component is disconnected from the component tree to store attributes as default values, rather than row values
        ICE-7031 added Meta class for ajax tag handler; added 'behaviorId' attribute to @TagHandler annotation for BehaviorHandler's; adjusted animation tag handler to this change
        ICE-6118 : Enhance build scripts to allow for compiling and building libraries and samples against MyFaces
        ICE-6970 Adopted Apache 2.0 license source-code headers for ACE source-code.
        Files Changed
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIComponentMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/utils/PropertyValues.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Facet.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/DefaultValueType.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/utils/Utility.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/artifacts/TagArtifact.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/build.xml
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/artifacts/Artifact.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/HtmlInputTextMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/Generator.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/ClientBehaviorHolder.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/behavior/ClientBehaviorHolder.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Properties.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/artifacts/ComponentArtifact.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Component.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/xmlbuilder/FacesConfigBuilder.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UISelectBooleanMeta.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/artifacts/TagHandlerArtifact.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/ActionSource.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UICommandMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Implementation.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/context/TagHandlerContext.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/build.properties
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Expression.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/TagHandler.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Facets.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIOutputMeta.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/TagHandlerType.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIDataMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIInputMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Property.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/xmlbuilder/TLDBuilder.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIMessageMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/utils/FileWriter.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/behavior/Behavior.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/context/GeneratorContext.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIComponentBaseMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UISelectManyMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/xmlbuilder/FaceletTagLibBuilder.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/ClientEvent.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIMessagesMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Field.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/context/MetaContext.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UISelectOneMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/context/ComponentContext.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/annotation/Required.java
        Commit graph ADD /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/xmlbuilder/FacesConfigMerge.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/TaglibMerge.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIPanelMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/xmlbuilder/XMLBuilder.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/artifacts/ComponentHandlerArtifact.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIColumnMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/meta/baseMeta/UIFormMeta.java
        Commit graph MODIFY /icefaces3/trunk/icefaces/ace/generator/src/org/icefaces/ace/generator/behavior/ActionSourceBehavior.java
        Ken Fyten made changes -
        Status Resolved [ 5 ] Closed [ 6 ]

          People

          • Assignee:
            Arturo Zambrano
            Reporter:
            Arturo Zambrano
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: