SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Some Examples Michael A. Fons Aderas
 
 
 
 
[object Object]
 
[object Object],[object Object]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
“ I want to use RichOutputText, Fred.” “ Our default render kit of oracle.adf.rich will help with that, Charlie.”
“ So we agree then:  Charlie is a combineComponentType!” “ If that is how you feel, Fred, then we are agreed.”
<application> <default-render-kit-id> oracle.adf.rich </default-render-kit-id> </application> <component> <component-type> combineComponentType </component-type> <component-class> mfons.presentations.JSF.customcompdev.view.components.component.CombineSimple </component-class> </component>
I recognize all this!
private ValueExpression  valueVE ; <attribute> <description> first value </description> <name> valueVE </name> <deferred-value>  <type> java.lang.String </type> </deferred-value> </attribute>
 
 
@Override public void encodeEnd(FacesContext facesContext) throws IOException { ResponseWriter writer = facesContext.getResponseWriter(); super.encodeEnd(facesContext); encodeSecondField(facesContext); } RichOutputText embedded
 
 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Ew…
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
oracle.adf.view.rich.component.rich.input.RichInputText inputComp = new RichInputText();
 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

JSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress comingJSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress comingAndy Schwartz
 
Component Framework Primer for JSF Users
Component Framework Primer for JSF UsersComponent Framework Primer for JSF Users
Component Framework Primer for JSF UsersAndy Schwartz
 
Angular Mini-Challenges
Angular Mini-ChallengesAngular Mini-Challenges
Angular Mini-ChallengesJose Mendez
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Jeado Ko
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIVisual Engineering
 
Migrating an application from Angular 1 to Angular 2
Migrating an application from Angular 1 to Angular 2 Migrating an application from Angular 1 to Angular 2
Migrating an application from Angular 1 to Angular 2 Ross Dederer
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Angular 2 - The Next Framework
Angular 2 - The Next FrameworkAngular 2 - The Next Framework
Angular 2 - The Next FrameworkCommit University
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorialClaude Tech
 
Web components are the future of the web - Take advantage of new web technolo...
Web components are the future of the web - Take advantage of new web technolo...Web components are the future of the web - Take advantage of new web technolo...
Web components are the future of the web - Take advantage of new web technolo...Marios Fakiolas
 
Ant - Another Neat Tool
Ant - Another Neat ToolAnt - Another Neat Tool
Ant - Another Neat ToolKanika2885
 
Workshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IWorkshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IVisual Engineering
 
Angular 8
Angular 8 Angular 8
Angular 8 Sunil OS
 
Angular JS - Introduction
Angular JS - IntroductionAngular JS - Introduction
Angular JS - IntroductionSagar Acharya
 
준비하세요 Angular js 2.0
준비하세요 Angular js 2.0준비하세요 Angular js 2.0
준비하세요 Angular js 2.0Jeado Ko
 
C# Security Testing and Debugging
C# Security Testing and DebuggingC# Security Testing and Debugging
C# Security Testing and DebuggingRich Helton
 
Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016
Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016
Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016Codemotion
 

Was ist angesagt? (20)

JSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress comingJSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress coming
 
Component Framework Primer for JSF Users
Component Framework Primer for JSF UsersComponent Framework Primer for JSF Users
Component Framework Primer for JSF Users
 
Angular Mini-Challenges
Angular Mini-ChallengesAngular Mini-Challenges
Angular Mini-Challenges
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte III
 
Migrating an application from Angular 1 to Angular 2
Migrating an application from Angular 1 to Angular 2 Migrating an application from Angular 1 to Angular 2
Migrating an application from Angular 1 to Angular 2
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Angular js architecture (v1.4.8)
Angular js architecture (v1.4.8)Angular js architecture (v1.4.8)
Angular js architecture (v1.4.8)
 
Angular 2 - The Next Framework
Angular 2 - The Next FrameworkAngular 2 - The Next Framework
Angular 2 - The Next Framework
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorial
 
Web components are the future of the web - Take advantage of new web technolo...
Web components are the future of the web - Take advantage of new web technolo...Web components are the future of the web - Take advantage of new web technolo...
Web components are the future of the web - Take advantage of new web technolo...
 
Ant - Another Neat Tool
Ant - Another Neat ToolAnt - Another Neat Tool
Ant - Another Neat Tool
 
AngularJS 101
AngularJS 101AngularJS 101
AngularJS 101
 
Workshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IWorkshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte I
 
Angular 8
Angular 8 Angular 8
Angular 8
 
Angular JS - Introduction
Angular JS - IntroductionAngular JS - Introduction
Angular JS - Introduction
 
준비하세요 Angular js 2.0
준비하세요 Angular js 2.0준비하세요 Angular js 2.0
준비하세요 Angular js 2.0
 
C# Security Testing and Debugging
C# Security Testing and DebuggingC# Security Testing and Debugging
C# Security Testing and Debugging
 
Seam Glassfish Slidecast
Seam Glassfish SlidecastSeam Glassfish Slidecast
Seam Glassfish Slidecast
 
Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016
Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016
Understanding Angular 2 - Shmuela Jacobs - Codemotion Milan 2016
 

Ähnlich wie JSF Custom Components

Adventurous Merb
Adventurous MerbAdventurous Merb
Adventurous MerbMatt Todd
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesJohn Brunswick
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSFSoftServe
 
JavaScript & Dom Manipulation
JavaScript & Dom ManipulationJavaScript & Dom Manipulation
JavaScript & Dom ManipulationMohammed Arif
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentationipolevoy
 
Sencha / ExtJS : Object Oriented JavaScript
Sencha / ExtJS : Object Oriented JavaScriptSencha / ExtJS : Object Oriented JavaScript
Sencha / ExtJS : Object Oriented JavaScriptRohan Chandane
 
Javascript Templating
Javascript TemplatingJavascript Templating
Javascript Templatingbcruhl
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesSiarhei Barysiuk
 
Practical Ext JS Debugging
Practical Ext JS DebuggingPractical Ext JS Debugging
Practical Ext JS DebuggingShea Frederick
 
Lecture 5 - Comm Lab: Web @ ITP
Lecture 5 - Comm Lab: Web @ ITPLecture 5 - Comm Lab: Web @ ITP
Lecture 5 - Comm Lab: Web @ ITPyucefmerhi
 
Zend framework 05 - ajax, json and j query
Zend framework 05 - ajax, json and j queryZend framework 05 - ajax, json and j query
Zend framework 05 - ajax, json and j queryTricode (part of Dept)
 

Ähnlich wie JSF Custom Components (20)

Adventurous Merb
Adventurous MerbAdventurous Merb
Adventurous Merb
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
 
JavaScript & Dom Manipulation
JavaScript & Dom ManipulationJavaScript & Dom Manipulation
JavaScript & Dom Manipulation
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
Introduction to JQuery
Introduction to JQueryIntroduction to JQuery
Introduction to JQuery
 
Sencha / ExtJS : Object Oriented JavaScript
Sencha / ExtJS : Object Oriented JavaScriptSencha / ExtJS : Object Oriented JavaScript
Sencha / ExtJS : Object Oriented JavaScript
 
Jsp And Jdbc
Jsp And JdbcJsp And Jdbc
Jsp And Jdbc
 
Javascript Templating
Javascript TemplatingJavascript Templating
Javascript Templating
 
&lt;img src="xss.com">
&lt;img src="xss.com">&lt;img src="xss.com">
&lt;img src="xss.com">
 
Fav
FavFav
Fav
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best Practices
 
Practical Ext JS Debugging
Practical Ext JS DebuggingPractical Ext JS Debugging
Practical Ext JS Debugging
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Jquery 1
Jquery 1Jquery 1
Jquery 1
 
Lecture 5 - Comm Lab: Web @ ITP
Lecture 5 - Comm Lab: Web @ ITPLecture 5 - Comm Lab: Web @ ITP
Lecture 5 - Comm Lab: Web @ ITP
 
Zend framework 05 - ajax, json and j query
Zend framework 05 - ajax, json and j queryZend framework 05 - ajax, json and j query
Zend framework 05 - ajax, json and j query
 
Jsp
JspJsp
Jsp
 
JavaScript
JavaScriptJavaScript
JavaScript
 

Mehr von Michael Fons

Decoupling shared code with state that needs to cleared in between uses
Decoupling shared code with state that needs to cleared in between usesDecoupling shared code with state that needs to cleared in between uses
Decoupling shared code with state that needs to cleared in between usesMichael Fons
 
PDF What's new with JSF 2.0
PDF What's new with JSF 2.0PDF What's new with JSF 2.0
PDF What's new with JSF 2.0Michael Fons
 
JSF (ADF) Case Studies Presentation
JSF (ADF) Case Studies PresentationJSF (ADF) Case Studies Presentation
JSF (ADF) Case Studies PresentationMichael Fons
 
JSF (ADF) Case Studies Paper
JSF (ADF) Case Studies PaperJSF (ADF) Case Studies Paper
JSF (ADF) Case Studies PaperMichael Fons
 
Metamorphosis from Forms to Java: a technical lead's perspective
Metamorphosis from Forms to Java:  a technical lead's perspectiveMetamorphosis from Forms to Java:  a technical lead's perspective
Metamorphosis from Forms to Java: a technical lead's perspectiveMichael Fons
 
Metamorphosis from Forms to Java: a tech lead's perspective (paper)
Metamorphosis from Forms to Java: a tech lead's perspective (paper)Metamorphosis from Forms to Java: a tech lead's perspective (paper)
Metamorphosis from Forms to Java: a tech lead's perspective (paper)Michael Fons
 
Metamorphosis from Forms to Java: A technical lead's perspective, part II
Metamorphosis from Forms to Java:  A technical lead's perspective, part IIMetamorphosis from Forms to Java:  A technical lead's perspective, part II
Metamorphosis from Forms to Java: A technical lead's perspective, part IIMichael Fons
 
Testing Options in Java
Testing Options in JavaTesting Options in Java
Testing Options in JavaMichael Fons
 
Resume Chronological
Resume ChronologicalResume Chronological
Resume ChronologicalMichael Fons
 

Mehr von Michael Fons (9)

Decoupling shared code with state that needs to cleared in between uses
Decoupling shared code with state that needs to cleared in between usesDecoupling shared code with state that needs to cleared in between uses
Decoupling shared code with state that needs to cleared in between uses
 
PDF What's new with JSF 2.0
PDF What's new with JSF 2.0PDF What's new with JSF 2.0
PDF What's new with JSF 2.0
 
JSF (ADF) Case Studies Presentation
JSF (ADF) Case Studies PresentationJSF (ADF) Case Studies Presentation
JSF (ADF) Case Studies Presentation
 
JSF (ADF) Case Studies Paper
JSF (ADF) Case Studies PaperJSF (ADF) Case Studies Paper
JSF (ADF) Case Studies Paper
 
Metamorphosis from Forms to Java: a technical lead's perspective
Metamorphosis from Forms to Java:  a technical lead's perspectiveMetamorphosis from Forms to Java:  a technical lead's perspective
Metamorphosis from Forms to Java: a technical lead's perspective
 
Metamorphosis from Forms to Java: a tech lead's perspective (paper)
Metamorphosis from Forms to Java: a tech lead's perspective (paper)Metamorphosis from Forms to Java: a tech lead's perspective (paper)
Metamorphosis from Forms to Java: a tech lead's perspective (paper)
 
Metamorphosis from Forms to Java: A technical lead's perspective, part II
Metamorphosis from Forms to Java:  A technical lead's perspective, part IIMetamorphosis from Forms to Java:  A technical lead's perspective, part II
Metamorphosis from Forms to Java: A technical lead's perspective, part II
 
Testing Options in Java
Testing Options in JavaTesting Options in Java
Testing Options in Java
 
Resume Chronological
Resume ChronologicalResume Chronological
Resume Chronological
 

Kürzlich hochgeladen

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Kürzlich hochgeladen (20)

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

JSF Custom Components

Hinweis der Redaktion

  1. EITHER: Aderas is a provider of professional services supporting the Department of Defense, Federal Civilian Agencies, Commercial Companies, and other technology integrators. The company specializes in implementing, extending, managing, and tuning Oracle enterprise applications, databases, applications servers as well as custom J2EE development. We are located in Reston, Virginia. OR: Company established about 5 years ago. Bright group of folks. Virginia-based Specializing in Oracle-based technology consulting. Database Development Web Development Oracle Application Development Framework APEX Oracle Financials
  2. I have been a JSF/ADF developer for 3 years Working with Java for 7 years A Web developer since 2000 An IT professional since 1990 Have worked in a variety of Oracle (and non-Oracle technologies) And are currently working for Aderas in Fairfax, VA on ADF assignment.
  3. And I am wondering are you… evaluating ADF/JSF for suitability in an upcoming project? an advanced technologist, who is afraid this topic might be too basic for you? a “declarative” ADF developer who wishes to learn more about advanced or programmatic coding in JSF, to appeal to potential job markets? At any rate: welcome, all!
  4. This is an Introduction to JSF Custom Component development. I will give Examples of Custom Component development, for illustration. These examples will be somewhat more complicated than “Hello, world” (so that they are at least somewhat useful).
  5. This first example should help you start thinking about some fundamentals of JSF custom components. Here you see a simple web page with 4 fields and a submit button. So…what’s behind these fields?
  6. Here is a code snippet from behind those four fields. This is JSP/JSF code. It is markup. It is XML elements/attributes, attribute value strings, and something called EL.
  7. This diagram further illustrates the mapping from JSP/JSF UI tags and components to web browser output. Multicomp:combine is a JSF Custom UI component, which I created recently. Each instance of this component maps to one input field on the web page.
  8. The point or purpose of the multicomp:combine component was to be able to use database meta-data to drive web page content dynamically. So database data would decide what kinds of components would appear on a web page, and in what order. But now the purpose this example provides is a good lead-in to my main point…JSF Custom Components development.
  9. We have a variety of things going on here in our JSF tag. We have Expressions or EL – Expressions like #{Combine.componentType} represent the returned value of a method named getComponentType() in a Class named Combine. Expressions like this are represented on the Java realm by objects called value bindings/expressions. We also have tag attributes: The Type attribute – … specifies what kind of field you will see in the browser. This attribute can also have constant values like “text”, “number”, “date”, and “list” – instead of EL. The Value attribute – … specifies the input/output value of the browser field. This attribute can also have a constant value. For the Listvalues attribute, – … if the value of “Type” attribute is “list,” then this attribute specifies what makes up the possible values in the list. (so this is a collection)
  10. One can build web pages using JSP/JSF technology. On JSF pages, JSF Components are the building blocks – like “multicomp:combine.” Different UI and non-UI components provide different outputs and functions to build with. Oracle ADF Faces/Apache Trinidad has around 50 components in its suite. The newer Oracle ADF Faces Rich Client library has around 300 different components. All of these are JSF “custom” components.
  11. Look at http://www.jsfcentral.org/ for examples of some other JSF custom component sources. There are lots of component-makers’ links, and component libraries to check out from this site alone! Some component suites are free or “open”; Some are not But all component makers are competing to have their components used in your JSF apps.
  12. Even so, you and your end users will have I.T. needs which nobody has yet predicted. This fact, combined with JSF’s inherent flexibility means YOU have more than enough reasons to learn and use JSF to build custom components. JSF is meant to work with just about any technology set. It is meant to render to any device. Just about any fundamental class related to JSF can be extended or re-implemented. So, you can fill the gap between your needs and what may be available commercially or through open sources.
  13. Creating a JSF component is a good way to learn… Java J2EE/JavaEE JSP/JSF. These will make you more valuable to many companies world-wide.
  14. Returning to our multicomp:combine component, which has within it a variety of field choices… This component is a little-bit like Oracle’s ADF Faces Rich Client -- Declarative Component feature This is a quick way to package up multiple components or a template for use by one or more applications. It is a great component, BUT… How would you build a Declarative Component of your own if… You could not use ADF Faces Rich Client because of licensing restrictions? OR You did not know about ADF Faces Rich Client? OR You did not like Oracle’s implementation of their Declarative Component.
  15. Our next example will be kind of like multicomp:combine, but it will be even simpler. This component contains two output text pieces. Adding input (read-write) ability adds complexity; so we will start with read-only…and move up to read-write.
  16. During this presentation, I will describe 4 major parts of JSF Custom Component development: The Component class… … is the Java code to control component behavior and (can be) how the component writes to the output device (like the web browser). The Component tag/tag handler class… … is Java code to map the JSP file to the component class The Tag library descriptor file… … is the Xml file to designate what is allowed and expected in the JSP file that uses this component And the faces-config.xml … … allows us to Register custom components for use
  17. You may have noticed my team members, who are helping me out here tonight… Here’s…Charlie, the Component Class! He’s a sort of compona-saurus…with, uh…red shoes.
  18. And here we have Torriador, the Component Tag Class! (He’s a vain creature…)
  19. … Lout, the Tag Library Descriptor file! (…he’s scary looking, but actually not that bad, once you get to know him)
  20. … and, Fred: the faces-config file!
  21. Our example is called “CombineSimple” Since our plan is to output two pieces of text, we will do this by using two different output text components combined into one custom component. But there are many output text components to choose from; which output text components will we use? This example combines h:outputText and af:outputText to make the new component. First, UIOutput is the component class for h:outputText, from the JSF standard component library. The other component we will use is RichOuputText from Oracle’s ADF Faces Rich Client; this is the component class associated with the af:outputText tag. We will extend UIOutput to create the CombineSimple class, and then embed the display of the Rich Ouputput Text inside of CombineSimple.
  22. I created this example using… JDeveloper 11g, and the Java EE template within Jdev 11g The Java EE template provides all the libraries and resource files the standard UIOutput needs; but RichOutputText also needs … The ADF Faces Runtime 11g library. The Trinidad “resources” servlet specified in web.xml. (In creating this app, we Could have used the Fusion template also; this would have provided everything both components need to work, but would have added a bunch of extra stuff we were not using as well.) As you can see, Charlie is getting everything he needs.
  23. Turning to Fred – the faces-config.xml, -- we see he has many jobs related to custom components. It turns out that Charlie needs to access a resource called “oracle.adf.rich” to keep his RichOutputText parts working properly. This resource is called a Render Kit, which is a class which includes a map of instances of classes called renderers, one of which controls how RichOutputText looks when it is rendered/drawn on the web browser page. (grouped by component family) So, for the af:outputText, we will use Fred (or faces-config.xml) to specify a default render kit of oracle.adf.rich for this app.
  24. Fred also keeps track of connections between some team members. The connection between Charlie and Torriador is established here by registering the component class (Charlie), and specifying a type identifier for this also. In this case, Charlie has the type, “combineComponentType”. This is because Torriador and Fred have agreed that this is the type Charlie has. This means: the getComponentType() method in the tag handler class returns the same String id as the component type element in faces-config.xml registration for our custom component. Furthermore Fred knows where to find Charlie…his virtual street address, if you will: Charlie’s full class name. The JSP/JSF runtime needs this information to know where to go next after processing the JSF tag we are considering in this example.
  25. So…for your reference, here is what Fred knows that applies to this example. In order, you see the default render kit, Charlie’s type to which Torriador referrs, and where to find Charlie in the classpath for this app.
  26. In Jdeveloper 11g, I added the following to a default JSF 1.2 page: An attribute/value pair to the jsp:root element, identifying our new tag library: xmlns:xyz=http://mfonsadf.blogspot.com/JSF/customcomp/combine I chose to name the component’s XML namespace of “xyz”, because I wanted to show that the name could be anything at all. The URL can also be anything at all; it is not a URL which points to an internet resource of some sort…it is just an identifier (in a URL format) which must match what Lout has! (Remember that Lout is our Tag Library Descriptor file, or TLD, for short.) Please also note the attributes we are passing to our component in this diagram; they are in the blue inner rectangle of our JSP Page diagram…with the first attribute being “the first value” and the second being “the second value ”
  27. Lout (or the TLD file)… can be easily created by using the menu options New  Web Tier  JSP  JSP Tag Library, which is a wizard available in Jdeveloper. This file maps the reference of your tag library (in the jsp:root of your JSP page) and the particular tag you are using in that library, to the Component Tag implementation class (or Tag Handler class). this file also gives attribute tags which declare properties for the component; These attribute names match Torriador’s property names and accessor methods. (Remember: Torriador is the tag handler class).
  28. The tag handler class does several things: It’s setProperties() method moves the tag’s attribute values and value bindings into the associated custom component. It also maps the component type defined in the faces-config.xml to the renderer-type/renderer-class, if any; It helps map the tag reference in your page to the component class via the component type, which will match a component entry in your faces-config.xml file (see Fred in the picture?) The tag handler class is the place for accessor methods for each attribute of the tag; since this class may be accessed by multiple sessions at once, these methods are often “synchronized”.
  29. Component classes in general have the following functions: encode*() methods relate to generating the response (mark-up). The decode() method handles requests for the JSP page the component is part of (during postback requests only). Decode is not needed for this simple example, since our component only does output. Encode*() and Decode() methods can be separated out into a Renderer class as well, which would work with the component class.
  30. In this example, the purpose of this class is to … Extend UIOutput class and let default functionality take care of the first component’s functionality (h:outputText). After UIOutput is finished generating its response in an overridden encodeEnd() method (using super.encodeEnd()), Charlie, our custom component class, generates response for the second component (RichOutputText/af:outputText) by calling a new method named encodeSecondField().
  31. So here is our generated web page! Remember these values from the slide showing the JSP call to this component? These two strings shown here were passed in as attributes to our component’s tag.
  32. To review, here is the big picture. Do you need a minute to review this?
  33. For your reference, I will include the full code of this first example…. This is the TLD file we are using. (Hi, Lout!) Note: where it says the values of the attributes can be “deferred”; we’ll talk a bit more about that in a minute.
  34. Here’s Mr. T, first page…
  35. Here’s the second half of Torriador.
  36. Here is the first part of Charlie, our component class.
  37. … and his latter half. Note that since our RichOutputText is an embedded component within another component, the embedded component needs an Id to be given to it, in order for it to work. We will also talk more about this in a minute.
  38. And clearly Fred is a man of few words…especially on this project.
  39. The first example was very simple, because our component only did output. So, in our next example: we will produce another combined tag but, this time, with an UIOutput and RichInputText. (In JSP, the equivalent tags would be h:outputText and an af:inputText.) So, what happens if we just replace the embedded output text object for an input text object in our Component class? Altering this single line of code…see the bottom of the screen… … Gives us what you see here…
  40. So…We got an input field to display. More helpful would be if the input was part of an HTML form that could post and do something! So what do we change in our custom component to… … have a submit button to post changes? And to make the input field’s default value one that prompts the end-user to do something with this screen? And to make our output text display the posted input field’s value, after we submit it?
  41. To get the button, add a call to a method to encode the button in the custom component’s encodeEnd method after the call to encode the second field… This method, encodeSubmitButton(), is defined as shown. And it produces output, as shown, beneath it. Notice ResponseWriter methods allow us to write XML/HTML elements and attributes, in a reasonably intuitive coding format.
  42. In the jspx file we first change the value of the second tag attribute called “value2VE”, to a more appropriate default value of “Type something!”; this tag attribute controls the default value of the input field for this component. This is shown as OPTION 1. For OPTION 2: since we defined these values in the TLD file (that is, in Lout) as “deferred values”, we could have also used EL here instead of “Type something!” The result of the second version would be to use, as a value for attribute value2VE, the value returned by calling getInitialValue() in the Java class “myBackingBean”.
  43. Up to now we have done nothing with the component decode() method, because output-only components have no need for such a method. Using decode(), on a postback, we will capture the input field’s value from the request parameter map. (A postback is when you submit a form on a web page, and then when the web page re-renders, you still are on the same page.) Since we are getting our input value from the request parameters, this means that the value of the “name” attribute of any input elements in the HTML which this component generates is now very important, since we need to track field values from one request to another. We can somewhat control the id’s and names of the different tags that are rendered for our component; for embedded components the value of the name attributes in these tags is derived in part from our specified id value. The input elements’ names turn into the key names in our request’s parameter map. By viewing the source in our web browser, we see that our setId(“_second”) resulted in the following markup. (see the screen)
  44. Like most things, there are some things that people call “normal”, and then there is “reality”. In most cases when you have an input field as part of a JSF custom component, you will extend UIInput. But Charlie, our component, is extending from UIOutput for some reason. This makes our decode a bit abnormal, since we cannot use the setSubmittedValue() method of the input component here, because we create the input component on the fly. Normally, we would call the setSubmittedValue() method of the component here in decode() in order to give our input component a value to validate and process in the JSF lifecycle. But we will not even create our input component until the encode*() methods fire, which happens later in the lifecycle… So, we improvise: we actually set the value of a component property called postbackValue2 to contain this submitted value. Then, when it comes time to encode this input value, we will have a value with which to set the input component’s submitted value. The point of a component having a submitted value is to act as a starting point for the value that is bound to an input field. This value always starts out with a datatype of String, since it comes from a request parameter, but for a component the value may be converted and validated over the course of the JSF lifecycle.
  45. Another odd thing about this decode() method is that we have to work extra hard to find the request parameter map key of the input field in our component. Primarily this is because the ADF Faces input text component puts “::content” suffix on the end if its id. (the input text component is often used in a panelForm component where it has a separate “label” section. The “label” part of this component is suffixed with “::label”, since using suffixes to differentiate sub-elements in generated component output is standard practice in JSF component development.) Another piece to the puzzle is that, for custom components that accept input, they will need a HTML &lt;form&gt; tag in the eventual encoded HTML in order to be able to do a submit of the value in this input field. The way to get this form element, generally, is to use an &lt;h:form&gt; or &lt;af:form&gt; (or similar) to produce this html.. &lt;h:form&gt; is part of the JSF spec implementation, so it is often used by default for this purpose. &lt;h:form&gt; has a side-effect that all the id’s nested within the HTML generated by the components within the &lt;h:form&gt; will be prefixed with the id of the &lt;h:form&gt;. So…my process for finding the key to look through the request parameter map for my submitted value is (finally) to find the “form” id part of the “clientId” of this component, then to append my known “id” which I will later give my input text part in the encode method for this component. This process allows me to obtain the submitted value and display it in the output text portion of my component by simply setting my components value to the submitted value, which we recorded during decode().
  46. As I said, we added a property called postbackValue2 to temporarily store the value posted back from the input field; Also in encodeSecondField(), we alter the value of the input component if a value has been posted back. Additionally, we are doing a setValue or setValueExpression, as we would have in the tag handler’s setProperties() method…only we are doing it right here in the encode process of the component.
  47. Here is our end result.
  48. (Check time, and do demo if appropriate.) The “team” wants to know if that is all I am going to say? For now yes. This team is capable of so many things. They are an extremely flexible bunch. Lots of variations are possible. For example, it is possible to take an existing tag and make it look completely different for your purposes by using another team member call Rodney, the Renderer. Rodney’s father, Robert, the RenderKit also fits into this strange scenario. Another variation involves not even using a decode to handle input, but instead using ajaxian techniques which uses another friend Phoebos, the PhaseListener. He is a bit like Robin Hood: he likes to hijack requests to provide “resources” for the team…resources like data files, or Javascript files, or cascading style sheet files.
  49. Any questions? Hopefully this presentation has been informative. I have listed some references on the next slide for your study. I hope you learn a lot this week. Have a wonderful week.