Views
Views are HTML content that can be rendered inside a layout or by themselves. They can be rendered on-demand or set by an event handler. Views can also produce content apart from HTML, like JSON/XML/WDDX, via our view renderer, which we will discover. So get ready for some rendering goodness!
Setting Views For Rendering - setView()
setView()
Event handlers are usually the ones responsible for setting views for rendering. However, it's important to understand that ANY object with access to the request context object can also perform this task. This knowledge will keep you informed about the rendering process. The setView()
method in the request context object is the tool that enables this functionality.
Setting a view does not mean that it gets rendered immediately. This means that it is deposited in the context of the request. Later on in the execution process, the framework will pick those variables up and do the actual rendering. To do immediate rendering, you will use the inline rendering methods described later.
We use the setView()
method to set the view views/general/index.cfm
to be rendered. The cool thing about this is that we can override the view to be rendered anytime during the request flow. So, the last process to execute the setView()
method is the one that counts. Also, notice a few things:
No extension is needed.
You can traverse directories by using
/
like normalcfinclude
notation.The view can exist in the conventions directory
views
or your configured external locationsYou did not specify a layout for the view, so the application's default layout (
Main
) will be used.
It is best practice that view locations should simulate the event. So, if the event is general.index, there should be a general folder in the root views folder with a view called index.cfm/bxm
Let's look at the view code:
I am using our cool HTML Helper class, which is smart enough to render tables, data, HTML 5 elements, etc., and even bind to ColdFusion ORM entities.
Views With No Layout
So what happens if I DO NOT want the view rendered within a layout? Am I doomed? Of course not, use the same method with the noLayout
argument or event.noLayout()
method:
Views With Layouts
If you need the view to be rendered in a specific layout, then use the layout
argument or the setLayout()
method:
Views From Modules
If you need the set a view to be rendered from a specific ColdBox Module then use the module
argument alongside any other argument combination:
View Regions
The setView()
method also has a name
argument, which you can use to denote a rendering region. This will not affect the main set view rendered by the framework. This will set up the arguments to render the view, and then YOU will use the #view( name : "myRegion" )#
code to render it wherever you like. The purpose of this method is to encapsulate rendering mechanics from views and let the handlers control it.
Now that you have set the named region, you can evaluate it and render it it using the view()
method
Render Nothing
You can also tell the renderer not to render anything back to the user by using the event.noRender()
method. Maybe you just took some input and need to gracefully shut down the request into the infamous white screen of death.
Implicit Views
You can also omit the explicit event.setView()
if you want, ColdBox will then look for the view according to the executing event's syntax by convention. So if the incoming event is called general.index
and no view is explicitly defined in your handler, ColdBox will look for a view in the general
folder called index.cfm
. We recommend matching event resolution to view resolution, even if you use implicit views.
Tip: This feature is more for convention purists than anything else. However, we do recommend, as best practice, explicitly declaring the view to be rendered when working with team environments, as everybody will know what happens.
Caution: If using implicit views, please note that the name of the view will ALWAYS be in lowercase. So please be aware of this limitation. I would suggest creating URL Mappings with explicit event declarations to control case and location. When using implicit views, you will also lose fine rendering control.
Disabling Implicit Views
You can also disable implicit views by using the coldbox.implicitViews
configuration setting in your config/ColdBox.cfc
. This is useful as implicit lookups are time-consuming.
Case Sensitivity
The ColdBox rendering engine can also be tweaked to use case-insensitive or sensitive implicit views by using the coldbox.caseSensitiveImplicitViews
directive in your config/ColdBox.cfc
. The default is to turn all implicit views to lowercase, so the value is always false.
Last updated