Download - Dynamic Elements
![Page 1: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/1.jpg)
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
Dynamic ElementsJohann WernerNUREG GmbH
![Page 2: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/2.jpg)
• What are components
• Different common types
• Dynamic components
Outline
![Page 3: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/3.jpg)
Components
• reusable pieces of representation + functionality
• WebObjects comes with many(e.g. WOBody, WORepetition, WOString, …)
• Wonder adds a whole bunch(e.g. AjaxModalContainer, ERXLocalizedString, …)
![Page 4: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/4.jpg)
Components
Template
Info file
Component API
Code
Binding declarations
![Page 5: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/5.jpg)
Standard Component
• subclass of WOComponent
• automatic push/pull of binding values
• preserves state
![Page 6: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/6.jpg)
Standard Component
[…]<wo:MyString value="Hello World" />[…]
public class MyString extends WOComponent { public String value;
public MyString(WOContext context) { super(context); }}
<wo:str value="$value" />
TemplateCodeParent
![Page 7: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/7.jpg)
Non-Synchronizing Component
• manual push/pull of binding values
➡ less overhead
• preserves state
![Page 8: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/8.jpg)
Non-Synchronizing Component
[…]<wo:MyString value="Hello World" />[…]
public class MyString extends WOComponent { public MyString(WOContext context) { super(context); }
@Override public boolean synchronizesVariablesWithBindings() { return false; }
public String value() { return (String) valueForBinding("value"); }}
<wo:str value="$value" />
TemplateCodeParent
![Page 9: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/9.jpg)
Non-Synchronizing Component
[…]<wo:MyString value="Hello World" />[…]
public class MyString extends WOComponent { public MyString(WOContext context) { super(context); }
@Override public boolean synchronizesVariablesWithBindings() { return false; }}
<wo:str value="$^value" />
TemplateCodeParent
![Page 10: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/10.jpg)
Stateless Component
• manual push/pull of binding values
➡ less overhead
• no state
• single shared instance*
➡ less memory, fewer Java object-creations
![Page 11: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/11.jpg)
Stateless Component
[…]<wo:MyString value="Hello World" />[…]
public class MyString extends WOComponent { public MyString(WOContext context) { super(context); }
@Override public boolean isStateless() { return true; }}
<wo:str value="$^value" />
TemplateCodeParent
![Page 12: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/12.jpg)
Stateless Component
[…]<wo:MyString value="Hello World" />[…]
public class MyString extends WOComponent { private Object myVar; public MyString(WOContext context) { super(context); }
@Override public boolean isStateless() { return false; } @Override public void reset() { super.reset(); myVar = null; }}
<wo:str value="$^value" />
TemplateCodeParent
![Page 13: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/13.jpg)
Dynamic Component
• subclass of WODynamicElement
• no template
➡ less memory, faster
• direct access to bindings (WOAssociation)
• direct access to children elements
• must be thread-safe!
![Page 14: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/14.jpg)
Dynamic Component
[…]<wo:MyString value="Hello World" />[…]
public class MyString extends WODynamicElement { private WOAssociation value;
public MyString(String name, NSDictionary<String, WOAssociation> associations, WOElement template) { super(name, associations, template); value = associations.get("value"); }
@Override public void appendToResponse(WOResponse response, WOContext context) { WOComponent component = context.component(); response.appendContentString((String) value.valueInComponent(component)); }}
CodeParent
![Page 15: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/15.jpg)
Demo
![Page 16: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/16.jpg)
Demo Results
• The more specialized component class the faster it is
• Stateless and dynamic components create less Java objects
![Page 17: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/17.jpg)
Standard components
• for pages, big blocks
Non Synchronizing components
• smaller components that are used often
• binding has
• different name as the variable to hold it
• no variable counterpart
When should I use…
![Page 18: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/18.jpg)
Stateless components
• no state necessary
• memory optimization
Dynamic components
• no state necessary
• complex output generation
• access to child elements
When should I use…
![Page 19: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/19.jpg)
Component Class Tree
Object
WOElement
WODynamicElement WOHTMLBareString WOComponent
AjaxComponent D2WComponent
D2WStateless-Component
ERXComponent
ERXNonSynchronizing-Component
ERXStateless-Component
JSComponent
AjaxDynamicElement WOHTMLDynamic-Element
WODynamicGroup
WOHTMLURLValued-Element WOInput
![Page 20: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/20.jpg)
Component Class Tree
Object
WOElement
WODynamicElement WOHTMLBareString WOComponent
AjaxComponent D2WComponent
D2WStateless-Component
ERXComponent
ERXNonSynchronizing-Component
ERXStateless-Component
JSComponent
AjaxDynamicElement WOHTMLDynamic-Element
WODynamicGroup
WOHTMLURLValued-Element WOInput
![Page 21: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/21.jpg)
Object
WOElement
WODynamicElement WOHTMLBareString WOComponent
AjaxComponent D2WComponent
D2WStateless-Component
ERXComponent
ERXNonSynchronizing-Component
ERXStateless-Component
JSComponent
AjaxDynamicElement WOHTMLDynamic-Element
WODynamicGroup
WOHTMLURLValued-Element WOInput
Component Class Tree
ERXLoremIpsum,ERXWOSwitch, …
AjaxHighlight,ERXWORepetition, …
AjaxHyperlink,AjaxSubmitButton, …
AjaxFunctionLink,ERXJavaScript, …
WOBody,WOFrame, …
ERXSubmitButton,WOCheckBox, …
![Page 22: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/22.jpg)
Component Class Tree
Object
WOElement
WODynamicElement WOHTMLBareString WOComponent
AjaxComponent D2WComponent
D2WStateless-Component
ERXComponent
ERXNonSynchronizing-Component
ERXStateless-Component
JSComponent
ERXDynamicElement WOHTMLDynamic-Element
WODynamicGroup
WOHTMLURLValued-Element WOInputAjaxDynamicElement
![Page 23: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/23.jpg)
Dynamic Base Classes
• ERXDynamicElement in ERXExtensions
• AjaxDynamicElement in Ajax
![Page 24: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/24.jpg)
DEMO
![Page 25: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/25.jpg)
Creating Dynamic Element
• extend ERXDynamicElement / AjaxDynamicElement
• appendToResponse
• response.appendContentString(…)
• appendTagAttributeToResponse(response, name, value)
• appendChildrenToResponse(response, context)
![Page 26: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/26.jpg)
Creating Dynamic Element
• xxxValueForBinding(name, [default,] component)
• ContextData
• beforeProcessing(context)
• afterProcessing(context)
![Page 27: Dynamic Elements](https://reader034.vdocuments.mx/reader034/viewer/2022042515/555a6a5dd8b42a972b8b4af3/html5/thumbnails/27.jpg)
Q&A
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012