www.teamdev.com

QuipuKit FAQ

VERSION 3 Published

Created on: Feb 6, 2008 8:56 PM by Tatyana Matveyeva - Last Modified:  Mar 12, 2008 2:47 PM by Tatyana Matveyeva

Licensing
Support Policy
Compatibility
General
Ajax
DataTable and TreeTable
TabbedPane and TabSet


Licensing


QuipuKit Licensing Models


QuipuKit is licensed per developer. It means you must acquire one license for each developer using QuipuKit. For example, if you have 5 developers involved into your project, but only 2 of them work with our product directly, you should purchase only 2 licenses.

There is also a Corporate License available. The Corporate License allows unlimited number of developers to use QuipuKit on any amount of computers within your company for development purposes.

You can register your license to an individual developer or to your company's name.

A license registered under a company's name is the property of the company and can be used by any of its employees or contractors. But please note that the number of developers, who are using QuipuKit should be equal to the number of licenses purchased.

If you registered your license to an individual developer, you are not permitted to use QuipuKit if this developer is not in your company anymore.

Evaluation License Restrictions


Evaluation license is designed for a 30-day trial of the software. You are entitled to our support during your evaluation period for free but you can only use the software for testing purposes during your trial. Please note that you are evaluating a fully-functional version of the product.

Academic License Restrictions


Academic license is only available for students and teaching staff of educational institutions and should be used for educational purposes only. It is prohibited to use the academic license for commercial development.

Open-Source License Restrictions


Open-source license is issued for a concrete project upon request. With this license you can use QuipuKit components in your project. The source code is not provided with this license.

Source Code Licensing


The source code for QuipuKit is available at the price of USD 4800. This price also includes one developer license for you.

Free Runtime Distribution


In support of other developers we do not charge them for distribution of their own products with our components enclosed. You pay only once when you purchase QuipuKit license. Having developed your own application with QuipuKit components enclosed you are entitled to distribute it to any number of end users without any additional fees to us.

Runtime is for free, but we do not provide any specific runtime license keys. For distribution of your own application with our components enclosed you should use the same quipukit-license.jar as you used for development purposes. You also should ensure that QuipuKit is not distributed in any form that allows it to be reused by any application other than that with which you distribute it.

Upgrade Policy


All minor releases for current users are for free. Only major releases of QuipuKit require upgrades. Upgrades are optional and they are 40% off the full license price.

No Annual Renewals


Your license is perpetual to the purchased QuipuKit version. No annual renewals are required.

Support Policy


Support Options


You can post your question at our support forum or send us your request via quipukit-support@teamdev.com or online support request form. We treat all of these means of support with equal priority.

Free Support Service


You get one year of our Standard Technical Support for free when you purchase the license as it is already included into the license price. Normally customers get our feedback within one business day. But sometimes request processing may take up to 3 business days depending upon the scope of work. Please note that you are entitled to our support even during your evaluation period.

Paid Support Service


You can use our Premium Support Service to ensure highest priority to your request. Premium Support guarantees our feedback within 1 business day from the date of request. It is paid on an hourly basis at a standard hourly rate of USD 30. This service includes e-mail support and support forums. If it's really necessary we may also provide telephone support here.

Support Renewal


After one year of Standard Technical Support expires support renewal costs 40% off the full license price. When migrating to newer versions customers get our technical support for one year from the date of
their upgrade at no additional costs, because it is also included into the price of the upgrade.

If you want to purchase the components, you can do so here. If you still have questions on licensing or support policy, you can contact our sales@teamdev.com.

Compatibility


Supported JSF implementations


QuipuKit was tested to work with the following JSF implementations:
  • Sun reference implementation 1.1 - 1.2
  • MyFaces implementation 1.1.1 - 1.1.5 and 1.2

Supported application servers


QuipuKit was tested to work with the following application servers:
  • Apache Tomcat 5.0 - 6.0
  • IBM WebSphere 6.0 -6.1
  • Bea WebLogic 9.2
  • JBoss 4.0 - 4.2
  • Glassfish
  • Jetty 6.1.x

JSR-168 Portlets support


QuipuKit can be used to develop JSR-168 Portlets. The current version of QuipuKit has been tested to work with the following portal servers:
  • JBoss Portal 2.4.x and 2.6.x
  • Liferay Portal 4.2.1
  • JetSpeed 2.0 Portal

IDE support


There is no IDE support in the current version of QuipuKit. We are planning to add support for the popular IDEs in one of the future releases of QuipuKit. To know about our nearest plans, please see the Roadmap.

Compatibility with JBoss Seam


The QuipuKit components are fully compatible with the JBoss Seam framework. The QuipuKit components have been tested to work with JBoss Seam version 1.2.1 and 2.0.

Compatibility with Tomahawk


QuipuKit and Tomahawk components can be used in the same application. However, there are some issues with some of the Tomahawk components. Most of the compatibility problems take place in cases when embedding Tomahawk components inside of QuipuKit components.

Compatibility with Trinidad


QuipuKit and Trinidad are not fully compatible yet. There are some issues when the QuipuKit and Trinidad components are used within one page.

Compatibility with RichFaces


We have not yet tested QuipuKit with Richfaces. However, we are not aware of any serious problems with QuipuKit and RichFaces compatibility.

Compatibility with ICEfaces


QuipuKit and ICEfaces components are not compatible currently.

General


Roadmap


To learn when the next version of QuipuKit will come out and what new features or components will it have, use the QuipuKit Roadmap.

Quirks and Standards Compliance modes


The QuipuKit components were tested to work in both Quirks and Standards Compliance modes.

Documentation


The QuipuKit developer's guide and the tag library documentation are available online. You can also use our knowledge base.

Placing the QuipuKit components in the <h:form> tag


In order for QuipuKit components to work properly, they should be placed in the <h:form> or an analogous tag.

Dynamic creation of the QuipuKit components from Java code


The dynamic creation of the QuipuKit components from the Java code is the same as for the standard JSF components. However, there is the createSubComponents() method that should be called for the following components after the component id is assigned (if it is assigned at all): FoldingPanel, TabbedPane, DropDownField, SuggestionField, TableColumn, TreeColumn. The typical creation of the QuipuKit components is shown in the following example:
include teamdev.jsf.component.datatable.DataTable;
...
Application application = facesContext.getApplication();
DataTable dataTable = (DataTable) application.createComponent(DataTable.COMPONENT_TYPE);
dataTable.setId("myDataTable"); // id assignment is optional, but you shouldn't change it after the createSubComponents invocation
dataTable.createSubComponents(facesContext);
...


Change the width of the DateChooser component


Currently, CSS width does not indeed affect the width of the DateChooser. The DateChooser was specifically designed to have the width equal to the pop-up Calendar's width.

However, you can declare the width for a DateChooser with the 'important' CSS modifier. For example:
<q:dateChooser style="width:70px!important;"/>


Ajax


Some of the content disappears after performing an Ajax request


In one of the following situations some of the content of ajaxable QuipuKit components disappears after performing Ajax request:
  • You use the <f:loadBundle> component withing the QuipuKit ajaxable components. The solution is to use the <q:loadBundle> component instead.
  • You use inline text in Facelets in QuipuKit version earlier than 1.3. The solution is to use <h:outputText> component with escape attribute set to false instead of inline text or update to the newer version of QuipuKit (1.3 or later).

Showing Ajax progress message when Ajax4jsf request is in progress


When any QuipuKit Ajax request is in progress, the "Loading..." message appears in the upper-right corner of the screen. There is no possibility to display this message while Ajax4jsf's Ajax request is in progress. And there is no possibility to display the a4j:status component while an Ajax request in QuipuKit components is being executed. However, you can customize the Ajax progress message for the whole application by using the teamdev.jsf.ajaxMessageHTML application scope parameter in web.xml or for the particular page by using the <q:defaultProgressMessage> tag. For more details, please see the documentation.

Disabling QuipuKit Ajax progress message


There is no dedicated feature not to show QuipuKit Ajax progress message, however it is possible to utilize features of customizing its appearance for achieving this effect. The idea is to customize the progress message to be invisible using the "display: none" CSS declaration. You can either customize the Ajax progress message for the whole application by using the teamdev.jsf.ajaxMessageHTML application scope parameter in web.xml or for the particular page by using the <q:defaultProgressMessage> tag. For more details, please see the documentation.

Here's an example of disabling Ajax progress message using the <q:ajaxSettings> tag:
<q:ajaxSettings>
  <f:facet name="progressMessage">
    <q:defaultProgressMessage style="display: none;"/>
  </f:facet>
</q:ajaxSettings>


DataTable and TreeTable


Number of filtered rows in the DataTable


You can get the total number of filtered rows using the getTotalRowCount() method of the DataTable component. You should use the component binding to be able to use this method from your backing bean.

Number of filtered rows in the TreeTable


At the present, there is no public API to get the total number of filtered rows for the TreeTable component. However, you can use the getRowCount() method. This method returns the number of rows that are actually loaded to the client. If you have the preloadedNodes attribute set to "all", the getRowCount() method will return the number of filtered rows.

Placing one DataTable/TreeTable into another one


There is a known issue that the DataTable and TreeTable components cannot be used inside DataTable, TreeTable or any other JSF components that replicate their child components during rendering. We are going to add support for such configurations in one of the future releases.

The row where an event occurs for the server-side event handlers


Server-side event handlers can be aware of the row where an event occurs by checking the request-scope variables that refer to the current row data object and current row index. See the appropriate documentation section. You can use the teamdev.jsf.component.util.FacesUtil.getRequestMapValue utility method if you need to retrieve a request-scope variable from a backing bean.

Duplicate component IDs exception


In some situations in Facelets application with Sun reference implementation 1.2, you can get the "duplicate component IDs" exception in the pages with the DataTable or TreeTable. This is actually not QuipuKit related problem and it can be reproduced in the application without QuipuKit at all. You can work around this problem by setting the id attributes for the all child components of the DataTable or TreeTable.

The filter components in the DataTable/TreeTable header are too wide


This problem can only be seen for filters with the "searchField" filter type. The problem appears on the pages having the "standards" rendering mode, which is triggered by DOCTYPE specified on the first line of your page. The filter's text field in this case is slightly wider than it should be, which results in its right edge intersect its cell's boundaries. You can use on of the following workarounds:
  • Switch your page to use the "quirks" rendering mode. You can do this either by removing the DOCTYPE declaration from your page, or changing it appropriately, for example as follows:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

  • Remain in the "standards" mode but specify the filterRowStyle="padding-right: 20px" for your table. Note that the actual amount of padding required to fix this might depend on the actual configuration of your table.

Use objects of different types to specify tree structure for the TreeTable component


You can specify the objects of different types for different TreeTable levels. First you should define a dynamic tree structure by specifying the <q:dynamicTreeStructure> tag and the nodeChildren attribute. The attribute should be specified as a value-binding expression, which is calculated for each node to retrieve the node's children. You can use the teamdev.jsf.component.util.FacesUtil.getRequestMapValue method to get the current node. Then you should return the node children depending on the current node type.

Expanding only one particular node programmatically


You can programmatically specify whether a particular node is collapsed or expanded with its nodeKey. To do so, you should do the following:

1. Bind the expansionState attribute of the TreeTable tag to the variable of teamdev.jsf.component.treetable.ExpansionState type in the backing bean.
2. Initialize this variable as follows:
private ExpansionState myTreeTableExpansionState = new DynamicNodeExpansionState(new AllNodesCollapsed());

3. Use the setNodeExpanded(TreePath keyPath, boolean expanded) method to specify whether the node is expanded or collapced. As the first parameter of the TreePath class, you should use nodeKey of the required node. The second parameter is the TreePath of its parent. For example:
myTreeTableExpansionState.setNodeExpanded(new TreePath("message10",null),true);

Here, "message10" is a nodeKey of the node that should be expanded and null means that it is a root node. Please also see the corresponding documentation section.

Note that if you want to expand the node, for example from the third level, you should expand all its parent nodes first. So you will need to make several setNodeExpanded method calls to expand nodes deep in a hierarchy of nodes.

Editable components in the TreeTable component


There is a known issue that you cannot use editable components within the TreeTable if this TreeTable is configured to expand its nodes with Ajax. As a workaround, you can either set preloadedNodes="all", or useAjax="false" for your TreeTable.

Pagination in the TreeTable component


There is no built-in feature to add pagination to the TreeTable component. However, you can still implement similar behavior by implementing your backing bean to provide only the partial tree structure, and changing the provided data set when pressing "next" and "previous" buttons. To do so, you should display the "next" and "previous" buttons in one of the child nodes on the tree branch that you need to have the pagination functionality, for example in the last node of each tree branch. You can use the <q:row> and <q:cell> tags to do so (see the documentation). In the nodeChildren attribute you should provide only the required number of items for the current "page". When the user clicks the "next" or "previous" button, you should reload the TreeTable component by using q_refreshTreeTable JavaScript function and change the currently displayed page number so that your backing bean provide the new set of child nodes. See also the documentation for the q_refreshTreeTable function.

We are planning to implement a built-in TreeTable pagination feature in one of the future releases of QuipuKit.

Change the +/- sign in the TreeTable


To change the +/- sign of the TreeTable component, use the expandedToggleImageUrl and collapsedToggleImageUrl attributes of the <q:treeTable> tag. You can see the example in the "Preloading Nodes" TreeTable demo. The source code of the QuipuKit demo is available at the Download page.

TabbedPane and TabSet

The difference between TabSet and TabbedPane


The TabbedPane component represents a set of pages for containing other components and a set of tabs for switching between these pages. Given the fact that the TabbedPane is a container, a developer can use different loading modes for loading the pages' content. For example, you can use Ajax to load the content of a TabbedPane page when it is selected for the first time.

The TabSet component is just a set of tabs that look like the ones located inside of the TabbedPane, but without any containers. So the TabSet can be used like a switch enabling a developer to manually adjust the page contents depending on a selected tab.

Different <h:form> components in different TabbedPane's tabs

The TabbedPane component should be included in the <h:form> component to save its state between page submissions. And it's incorrect to create nested <h:form> components. Therefore it's not possible to include <h:form> component as a child tag for every TabbedPane's tab in the current version of QuipuKit.

Tags: quipukit, faq
Average User Rating
(0 ratings)




There are no comments on this document