BootsFacessimpliying JSF

What’s New in BootsFaces 1.1.3?

Two weeks ago, Neil Griffin, the head of the LiferayFaces project, approached us. He asked us to do a few minor changes so the next version of Liferay and LiferayFaces can be shipped with a BootsFaces demo.

That, in itself, is quite a surprise. Liferay has finally migrated to Bootstrap 3. Obviously, BootsFaces wasn’t compatible with previous versions of Liferay. Funny thing is that at the same time the BootsFaces team discusses when it’s time to move on to Bootstrap 4. It seems the Bootstrap 3 version is going to be maintained a bit longer than expected.

So we published BootsFaces 1.1.3 quickly to align it with the Liferay release, which is expected by the end of this month (i.e. August 2017).

Download coordinates

Before starting the long list of details, let me provide you with the download coordinates:

Add these lines to your project’s pom.xml:


Add this line to your project’s .gradle build file:

compile 'net.bootsfaces:bootsfaces:1.1.3'

The release page at GitHub offers several download options, such as the compact BootsFaces version featuring only the default theme.

The BootsFaces project comes with both a Gradle build file and a Maven build file. The Maven pom.xml is the easy way to get started and should suffice for most purposes. Only if you want to tweak and optimize BootsFaces, you need the Gradle build. In particular, the Maven build doesn’t generate the CSS and JS files itself but relies on the output of the Gradle build. By the way, that’s the reason why we keep the generated file in GitHub.

In any case, the URL of the repository is

New features

The biggest feature of BootsFaces 1.1.3 is that we added the “buttons plugin” of Now you can export the table content to Excel, to a PDF file, copy it to the clipboard, and so on. The disadvantage is that the resulting JavaScript file is huge. The code alone weighs in at roughly one megabyte. So we decided to fetch it from the CDN instead.

After publishing the version we noticed the disadvantage of this decision. Not every client PC is connected to the internet. Obviously, we need to fix this in the next version.

Less controversial is the addition of the new attribute row-style-class to the datatable. It allows you to add one or more CSS classes that are added cyclically to each row. You can also set conditional row classes, as this example shows:

<b:dataTable value="#{carPool.carPool}"
             row-style-class="#{car.enginePower>100 ? 'light-power':'light'}, 
                              #{car.enginePower>100?'dark-power':'dark'} ">

Another big ticket deals with dynamic tabs. It’s not possible to wrap a <b:tab /> in an <ui:repeat /> command. BootsFaces doesn’t detect the nested tabs. So we decided to add the attributes value, var, offset, size, step, and varstatus to <b:tab /> itself. As it turned out, this ticket was a lot of work, but now it works like charm.

We’ve also added the option to track the progress of an image being loaded. Usually, you just use the <img /> or <b:image /> tag and hope the image is loaded fast enough. However, sometimes the images are huge, the bandwidth is disappointing or the network is unreliable. We’ve added a JavaScript API that allows to you track the load progress. The corresponding demo in the showcase didn’t make it to the final release in time, but you can combine this feature with a progress bar, as you can see in the source code of the next-version showcase demo.

Bug fixes

We also solved a handful of bugs. Probably the most annoying bug was that several developers suffered from command buttons which called their actionlistener twice. We’ve fixed that.

Even more annoying (and embarrassing) was a potential security leak. <b:inputSecret /> sent the password to the client. It wasn’t even encrypted. By default, BootsFaces 1.1.3 doesn’t do such a nonsense unless you force it to do so by setting a parameter. In this case, you are responsible for protecting your users from hacker attacks.

If you’re using <b:inputSecret />, please update to BootsFaces 1.1.3 (or higher) as soon as possible.

You can see the complete list of changes and improvements on our GitHub repository.

License polishing

The Liferay developers pointed out that a few files in BootsFaces still had the GPL license header. We corrected that and double-checked every other license. Now every file is either published under the Apache V2 license or under a compatible license.

Wrapping it up

In my perception, BootsFaces 1.1.3 is one of the smaller releases. Things progressed a bit easygoing because of the summer vacations. Nonetheless, you should update unless you’ve got restricted access to the internet.

During summer, the number of open tickets rose to almost 100. Many of these tickets are enhancement proposals. In other words: developers are interested in BootsFaces and have a lot of ideas to improve it.

2 thoughts on “What’s New in BootsFaces 1.1.3?

  1. [Original in German language]
    Ich habe eine wichtige Frage: Wenn ich Bootfaces DataTable nutze, bekomme ich immer nur 11 Datensaetze ausgegeben.
    Gibt es dafür irgendeinen bestimmten Grund?
    Für Hilfe wäre ich sehr dankbar.

    [English translation]

    I’ve got an important question: Using a BootsFaces DataTable, it shows only 11 rows. Is there any reason for that? Any help is appreciated.

    1. Hi Joe,

      most likely there’s a bug in your application. The BootsFaces DataTable doesn’t have any row limit. The only limit is imposed by memory constraints, performance, and network speed. But that limit doesn’t hit you until there are thousands of rows. In most cases, the network is the crucial bottleneck because the entire table is transferred at load time, even if only a small fraction of the rows is visible.

      In any case, this particular discussion is continued in the issue you’ve opened on our GitHub bugtracker.

Comments are closed.