I recently had a reason to look more closely at the standard apex:include
component in Visualforce, and I'm intrigued by the intent behind this component. Would anyone be willing to share some perspectives on when and why it would be more appropriate to use apex:include
vs. a custom Visualforce component?
It seems to me that Visualforce custom components do the same thing as an apex:include element, and Visualforce custom components have the added benefit of being able to accept custom attributes. The only use case I can imagine right now for using apex:include
is to bring in a page from a managed package.
Best Answer
apex:include was the original attempt at re-using content between Visualforce pages - its been superseded by components as they are properly re-usable as discrete standalone items.
Doug Chasman, the architect of Visualforce, posted the following on the developer forums in 2008 in response to a question regarding problems with apex:include:
(You can read the original post here)
One reason you might want to use apex:include is that if the main page and the included page use the same controller, they will share the same instance of that controller, and can influence each other's behaviour. I wouldn't recommend it though, as it can make the page structure and effects of changing code quite difficult to understand.
As an aside, composition templates are a way to provide a bunch of boilerplate content and functionality across a set of pages, while allowing each page to inject some custom content into certain areas. The poster child use case for this is a web site where each page injects its specific content into the main body, while the header/sidebar etc is provided by the template.
TL;DR - always use components over apex:include