We are glad to announce the new 0.7 release of
PrimeFaces Extensions. This is a main release which contains a lot of improvements and bug fixes. The full list of closed issues is
on the GitHub. I would like to pick up some highlights.
There are many, many fixes for
pe:ajaxErrorHandler. The reason: more users, incl. team members of the Extensions project started to use this component. We are thinking now to add a support for non AJAX requests too. Let's see where we will end up.
Enum values can be accessed on pages directly by the new
pe:importEnum tag. Usage is demonstrated in
this use case.
Thousand and decimal separators are Locale aware now. You don't need to pass a Locale as attribute - default values for thousand and decimal separators are taken in this way now
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
java.text.DecimalFormatSymbols decimalFormatSymbols = new java.text.DecimalFormatSymbols(locale);
String thousandSeparator = Character.toString(decimalFormatSymbols.getGroupingSeparator());
String decimalSeparator = Character.toString(decimalFormatSymbols.getDecimalSeparator());
This is a new component which provides many features such as export of multiple tables, sub-tables, tables with grouping, cell editing, dynamic columns, customized format, etc. It supports exporting of
DataList and custom exporter via Java ServiceLoader mechanism. Demo is available
here. This component is continuing to grow, more features are on TODO list.
DynaForm got some optimizations, e.g. new constructors without too much parameters and a new feature -
varContainerId.
varContainerId is a name of the variable which contains the prefix of the client Id within
pe:dynaFormControl. This property allows to get the whole clientId of a component within
pe:dynaFormControl. The whole client Id is sometimes required for JavaScript or
RequestContext.update(...). Demo is available
here. Users often asked how to update controls (cells) from another cells. We decided to implement a
new use case to demonstrate this feature (I call it inter-control or inter-cell communication within
pe:dynaForm). This nice use case demonstrates how to implement a class called
ClearInputsExecutor for the PrimeFaces Extensions'
ExecutableVisitCallback to clear all inputs / selects related to one row in
pe:dynaForm.
Layout got the
spacing_open and
spacing_closed attributes which define spacing between adjacent layout panes. But the main improvement in this release is not this feature. Until now we only could use an instance of
LayoutOptions in the options attributes of
pe:layout tag. We thought, because
LayoutOptions gets serialized to JSON to be able to be used in the underlying widget, it would be also nice to accept already serialized options as JSON string as well. This could increase the time of layout building when the layout is built during application startup in an application scoped bean. The options attribute accepts now a JSON string. Just call
toJson() method on
LayoutOptions and use it like this
<pe:layout options="#{layoutController.options}" ...>
@ManagedBean(eager=true)
@ApplicationScope
public class LayoutController implements Serializable {
private String options;
@PostConstruct
protected void initialize() {
LayoutOptions layoutOptions = new LayoutOptions();
LayoutOptions panes = new LayoutOptions();
panes.addOption("slidable", false);
...
layoutOptions.setPanesOptions(panes);
...
options = layoutOptions.toJson();
}
public String getOptions() {
return options;
}
}
This is a better choice in comparison to specifying options per attributes. Support of iframe acting as layout pane and updatable nested layouts were postponed to the next release.
TimePicker got a huge update. JS script was updated, fixed a collision with
p:calendar and an issue in Chrome, but especially handy is a new attribute
showOn. Similar to the PrimeFaces Calendar, this attribute defines the behavior when the timepicker is shown.
focus (default): when the input gets focus,
button: when the button trigger element is clicked,
both: when the input gets focus and when the button is clicked. The online demo is
available here.
Timeline was reimplemented almost from scratch and this is the most interesting highlight of this release! First, thanks to the
Applus IDIADA - company that sponsored the Timeline component. The new Timeline has features such as editable and read-only events, event's grouping, configurable zoom range, min. / max. dates for visible range, client-side and server-side API, i18n support, theming and more. We were excited to develop these interesting features. Explore various timeline features yourself, e.g.
client-side API,
server-side API or
grouped events.
Timeline is highly interactive. The component provides a convenient server-side API to update its events smoothly. What does it mean? Approach for editing is similar to the PrimeFaces' Schedule, but the Schedule component provide a client-side widget's API method
update() to update itself in
oncomplete. The main goal is to avoid a DOM update of the component markup because is has a complex UI and can leads to flickers. The problem with
update() is a separate AJAX request. So, we have two requests in the Schedule if we want to add or edit an event. The Timeline component provides a server-side API to update the component with only one request / response. So, you can update the UI on the server-side immediately when sending "update" request for a particular event. The main steps to do:
- Get thread-safe TimelineUpdater instance by timeline's Id (in terms of findComponent()).
- Invoke one or many (batch mode) CRUD operations, such as add, update, delete, deleteAll, clear, on the TimelineModel with the TimelineUpdater as parameter.
This is a paid component which has a quality. More features such as drag-and-drop from outside onto Timeline and connection arrows between dependent events are coming soon. As soon as the payment arrived, we will produce t-shirts for all team members and our friend Çağatay Çivici, the founder of
PrimeFaces and
PrimeTek. The first design looks like
Well, this was the first design, the word "PrimeFaces" is missing :-). It should be "PrimeFaces & Extensions". The back side doesn't show buildings as some readers may think. It shows the commit history on the GitHub :-).
What is the next? The project is stable. We have very small amount of open issues (around 20). This is a right time to grow. The next main release 1.0.0 will contain 3 new components! They will have the same quality as Timeline. The expected release date is tightly coupled with the upcoming PrimeFaces 4.0. Stay tuned.
Oleg, Great job. This release is just amazing.
ReplyDeleteJonathan Ekwempu
Thank you very much Oleg, you've done an amazing job in a really short time. You can count on Applus-IDIADA's development team for anything you need.
ReplyDeleteAgain: THANK YOU!!!
Thanks guys for your words. It was a pleasure to work on the new release.
ReplyDeleteSweet, the timeline component is a much needed feature.
ReplyDeleteThank you for all your great work on PF Ext!
ReplyDeleteFor new timePicker showOn="button": very cool; b if spinner and button render correctly...
Oleg your hard work is much appreciated by all in the JSF+Primefaces community. Keep up the great work!
ReplyDeleteJippi!
ReplyDeleteIts really great.
ReplyDeleteBut i am waiting for Spell checker in primefaces editor
Hi Oleg, thanks for your work, specially on dynaForm. is there a javadoc somewhere for the last version ?
ReplyDeleteNo javadoc. I don't think a javadoc for component / renderer classes is really worth :-). JavaScript doc for widgets would be great, but not all widgets are well documented currently.
ReplyDelete