f:facet - there is a list of predefined names attributes? - jsf

I have searched across the web with no luck, I know there are some predefined names, such as 'header' and 'footer' associated with the dataTable, also 'first' inside the head tag to run first this metatag.
There are other predefined names I should be aware of?
Thanks,
-M

You cannot find a predefined names list for facets. because facets are related to components. Every components supports different facets. e.g. h:datatable supports header and footer. primefaces datatable supports header, footer and emptyMessage facets. best way to find supportted facets you should look source code of component renderers. Primefaces DatatableRenderer, Mojarra TableRenderer

Related

Where do the values in a p:datatable for the currentPageReportTemplate come from?

I am trying to find out how the currentPageReportTemplate attribute of the dataTable tag and the resolving of its values works. I found e.g. this:
<p:dataTable currentPageReportTemplate="{startRecord} - {endRecord} von {totalRecords}">
There are some keywords which primefaces seems to replace with values, but where does it get the values from and how do I know what keywords are available?
The contents of the dataTable I am given are backed with an extension of org.primefaces.model.LazyDataModel, which overrides the load method to provide the content for the table rows. But I cant manage to find out where the data for totalRecords of the currentPageReportTemplate comes from.
I did some research, but could not find any kind of documentation that satisfied me. I read e.g. the tag api documentation: https://www.primefaces.org/docs/vdl/3.5/primefaces-p/dataTable.html
But there is just one little sentence about the currentPageReportTemplate attribute:
Template of the currentPageReport UI.
I also found this page https://www.primefaces.org/showcase/ui/data/datatable/paginator.xhtml with an example, but no explanation on how the values (e.g. for totalRecords) are determined.
How does Primefaces determine the value for e.g. totalRecords in the dataTable?

JSF Multiple components in grid

I am trying to get the reusable group of jsf 1.2 components inside a panelgrid using Facelet tag file. #Balusc's previous answer at How to make a grid of JSF composite component? was a fabulous resource. I have a couple of followup questions:
In my c:when how do I test for the tagName itself instead of checking for the attributes. Instead of
<c:when test="#{type != 'submit'}">
I want to check tagName itself to decide how to format it. If 'input' do xxx.
2 Is this approach is still valid with jsf 1.2 other than f:ajax? If yes, can I replace with a4j:support...?
In my c:when how do I test for the tagName itself instead of checking for the attributes.
I'm not sure how this question makes sense. It sounds like that you're approaching something not entirely right. Do you maybe have copypasted exactly the same piece of code over multiple tag files? You should not do that. Make it a reuseable <ui:composition> or maybe <ui:decoration> instead which you compose/decorate in every tag file along with a fixed and unique <ui:param> value depending on the taglib file.
Is this approach is still valid with jsf 1.2 other than f:ajax? If yes, can I replace with a4j:support...?
Being able to create tag files is not necessarily specific to JSF, but to the view technology used, which is in this case Facelets. You can even do similar stuff in its predecesor JSP, see also this answer for an example: JSF 1.2 custom component from jsp:include It should work just fine in every JSF version supporting the view technology in question.
As to ajax support, it doesn't matter to the tag file what you're all doing inside the tag file. If you want and can use <a4j:support> then just do it.

Custom components in JSF - what about sub-components (children)

When Im creating custom component in JSF do I have to create all sub-components in that same way?
For example:
h:dataTable component use h:column to determinate column parameters
Now if I want to create dataTable component do I have to implement in that same way a column component?
(PS. "that same way" mean:
create DataTable class extends i.e. UIOutput
create DataTableTab class extends UIComponentELTag
append configuration to
custom.taglib.xml
In general the answer is no. If you create a complex component like a datatable, it can simply take advantage of the existing components for defining columns.
As the designer of such a dataTable, you are the one who determines what's needed. The standard column afaik has no knowledge of the dataTable, but the dataTable has knowledge about the columns.
Also note that you don't often need to create tag classes. This is only needed for JSP compatibility, but as JSP is deprecated I would advise you to not support it unless you really have to.

Customizing the look of tabView headers

I am looking forward to customize the look of tabView component. I need to change the color of tab headers(& if possible, 2 different colors for 2 different headers). I tried to do so by specifying the CSS rules through styleClass attribute for tabView but failed to see desired results.
How I can achieve this ?
3.0.M2 has titleStyle and titleStyleClass attributes for tab component.
http://code.google.com/p/primefaces/issues/detail?id=892
Primefaces components get the look&feel from a css theme. You can either:
Build your own theme with the desired colors with Themeroller,
Change the style classes for your theme manually. Style classes for each Primefaces component are listed in the Primefaces documentation. Since the doc is not free for most recent Primefaces version 2.2 I can only help your with the classes from Primefaces 2.1: .ui-tabs, .ui-tabs-nav, .ui-tabs-panel. Notice that there might be more style classes applying to the tab view inherited from other components. Check html source of the tabView to get all applying classes.
Use the style or styleClasses attribute as described in your answer and overwrite the theme classes with the !important declaration

Sorting panelgrid JSF

Can we sort values in column of a panelGrid. If yes, can I see an example
Rather use h:dataTable to represent a dynamic table which is backed by a List<RowObject>, wherein RowObject is basically just a Javabean (DTO - Data Transfer Obejct, VO - Value Object, whatever you call it :) ) representing a single row.
Such a List can be sorted using Collections#sort(). All you need to do is to implement a Comparator which takes care about the ordering. Then in the JSF page just have a bunch of buttons or links which calls Collections#sort() on the List. Those buttons/links just have to pass the sortfield along.
You can find here a basic example: http://balusc.blogspot.com/2006/06/using-datatables.html#SortingDatatable
No, you can't. <h:panelGrid> = <table>
If you want sorting, look at Richfaces or another component framework (Icefaces, primefaces, trinidad, tomahawk, etc). There are <x:dataTable> components there which allow sorting on their <x:colum>.

Resources