YbObjects
Sur cette Page
YbList
Présentation
La YbList permet de dessiner une liste dans le thème de Yellowbox :
Pour pouvoir construire cet objet, 2 méthodes JavaScript sont rendues disponibles :
/**
* @param {String} tableId - <table> element ID
* @param {Object} listParams - JSON containing list parameters
* @return {Object} DataTable object
*/
function drawList(tableId, listParams)
Où :
tableId
est l’ID de l’élément<table>
qui va accueillir le tableau.listParams
est un JSON contenant les paramètres de construction de la liste. Il sera décrit plus bas.
Cette méthode renvoie un objet DataTable
après avoir constuit la liste dans l’élément HTML <table>
spécifié par son ID.
/**
* @param {String} tableId - <table> element ID
* @param {String} buildingServletName - List-parameter-building servlet
* @param params {Object} - Servlet params, if any
* @param onSuccess {Function} - Method to execute on building success, if any. No argument expected.
* @param onError {Function} - Method to execute on building error, if any. 3 arguments expected : jqXHR, textStatus, errorThrown.
* @return {Object} DataTable object
*/
function drawListFromServlet(tableId, buildingServletName, params, onSuccess, onError)
Où :
tableId
est l’ID de l’élément<table>
qui va accueillir le tableau.buildingServletName
est l’ID de la servlet qui retournera le JSON, sous forme deString
, les paramètres de la liste, comme le paramètrelistParams
de la méthodedrawList
.params
est un JSON contenant les paramètres de la servlet. Ce paramètre peut être vide (=null
/undefined
/{}
).onSuccess
est une methode contenant du code à exécuter après succès de la construction de la liste. Ce paramètre peut être vide (=null
/undefined
/() => {}
/function() {}
).onError
est une methode contenant du code à exécuter en cas d’erreeur de la construction de la liste. Ce paramètre peut être vide (=null
/undefined
/() => {}
/function() {}
).
Cette méthode renvoie un objet DataTable
après avoir constuit la liste dans l’élément HTML <table>
spécifié par son ID.
Les paramètres listParams
Voici comment se présente les paramètres de la liste :
const listParams = {
columns: [
{
id: String,
name: String,
orderable: Boolean,
searchable: Boolean,
title: String,
type: 'RAW'|'LINK'|'BUTTON',
},
...
],
data: [
{
'[FIRST_COLUMN_ID]': {
id: String,
label: String,
onClick: String,
imgUrl: String,
},
'[SECOND_COLUMN_ID]': {
...
},
...
},
...
],
pageLength: Number,
responsive: Boolean,
searchValueJsCallbackName: String,
serverSide: Boolean,
serverSideServletName: String,
};
Les colonnes
Il s’agit d’un tableau d’objets où chaque objet décrit une colonne. L’ordre d’affichage dépendra de l’ordre dans lequel les colonnes sont située le tableau.
const column1 = {
id: String,
name: String,
orderable: Boolean,
searchable: Boolean,
title: String,
type: 'RAW'|'LINK'|'BUTTON',
};
const columns = [
column1,
column2,
...,
];
Où :
id
: ID de la colonne qui sera repris dans le tableau des donnéesdata
. Il ne peut pas être vide.name
: Attributname
en HTML.orderable
: Indique si la colonne sera triable ou non. La valeurfalse
est forcée pour un typeBUTTON
.searchable
: Indique si la colonne sera cherchable ou non. La valeurfalse
est forcée pour un typeBUTTON
.title
: Le nom de la colonne. Il ne peut pas être vide.type
: Le type de données qui sera présent dans cette colonne:RAW
,LINK
ouBUTTON
.
Les données
Il s’agit d’un tableau d’objets où chaque objet représente une ligne. L’ordre dans lequel sont insérées les lignes représente l’ordre dans lequel elle apparaîtront dans la liste.
Chaque ligne est composée d’objets qui représentent les cellules de la ligne. Le nombre de cellules est strictement égal au nombre de colonnes définies dans columns
. Chaque cellule est associée à la bonne colonne en indiquant l’ID de la colonne comme clé de valeur, définie dans column.id
(voir ci-dessous).
const cell1 = {
id: String,
label: String,
onClick: String,
imgUrl: String,
};
const line1 = {
column1.id: cell1,
column2.id: cell2,
...,
};
const data = [
line1,
line2,
...
];
Où :
id
: ID de la cellule dans le DOM. Il n’a aucun lien avec l’ID de la colonne. Il peut servir pour pouvoir interagir avec le contenu de la cellule.label
:RAW
: Le texte affiché. Nonnull
.LINK
: Du texte cliquable affiché. Nonnull
.BUTTON
: Le texte affiché au survol du bouton. Peut êtrenull
.
onClick
(LINK
etBUTTON
uniquement) : Le code à exécuter sous forme de fonction (Ex :"() => console.log('Hello World!')"
). Nonnull
. Si la valeur est vide (i.e.''
), alors une cellule de typeBUTTON
n’affichera pas de contenu et aura la propriété CSSopacity: 0
.imgUrl
(BUTTON
uniquement) : L’URL de l’image à afficher pour le bouton. Si la valeur est vide, alors le bouton aura pour image l’icôneglyphicon-flash
.
Les autres paramètres
const listParams = {
columns: columns,
data: data,
// Other parameters
pageLength: Number,
responsive: Boolean,
// Server-side processing
searchValueJsCallbackName: String,
serverSide: Boolean,
serverSideServletName: String,
}
pageLength
: Nombre de lignes par page. Doit être supérieur à 0. 10 par défaut.responsive
: Activer ou non le mode responsive.true
par défaut.
Pour le traitement des données côté serveur :
serverSide
: indique que la liste sera gérée par une servlet en back-end.false
par défaut.serverSideServletName
: La servlet à appeler pour la gestion de la liste.searchValueJsCallbackName
: Nom de la méthode Javascript qui renverra une valeur à chercher. La méthode doit retourner unstring
.
API Java
Une API Java est disponible dans le plugin.jar afin de pouvoir construire facilement une YbList dans une servlet. Vous pouvez disposer des objets suivants :
YbList.java
: La classe principale qui représente l’objetlistParams
en JavaScript. Cette classe contient une méthodeYbList.toJson()
qui permet d’obtenir le JSON complet sous forme deString
.YbColumn.java
: La classe qui permet de définir une colonne avec les attributs nécessaires.YbCell.java
: La classe abstraite qui permet de définir une cellule. Elle est héritée par ses 3 classes filles :YbRawCell.java
: Pour les cellules de typeRAW
.YbLinkCell.java
: Pour les cellules de typeLINK
.YbButtonCell.java
: Pour les cellules de typeBUTTON
.
YbListBuilderServlet.java
: Une servlet qui se focalise sur la construction d’une YbList. Elle est à utiliser comme une servlet YellowBox classique.YbListUpdateServlet.java
: Une servlet qui se focalise sur la gestion des données d’une liste en server-side.YbListServerData.java
: Les données à renvoyer à l’issue du traitement d’uneYbListUpdateServlet
.
Voici un exemple simplifié d’utilisation d’une YbList
classique :
List<YbColumns> columns = new ArrayList<>();
columns.add(new YbColumn("0", "Colonne 1", YbColumn.Type.BUTTON));
// ...
YbCell cell1 = new YbButtonCell("() => { alert('Hey!') }");
Map<String, YbCell> row1 = new HashMap<>();
row1.put("0", cell1);
// ...
List<Map<String, YbCell>> data = new ArrayList<>();
data.add(row1)
// ...
YbList list = new YbList(columns, data);
list.setPageLength(5);
list.setResponsive(false);
return list.toJson();
Voici un exemple simplifié d’utilisation d’une YbList
server-side :
/**
* Construction de la liste
*/
List<YbColumns> columns = new ArrayList<>();
columns.add(new YbColumn("0", "Colonne 1", YbColumn.Type.BUTTON));
// ...
YbList list = new YbList(columns, UpdateListServlet.class.getSimpleName());
list.setPageLength(5);
list.setResponsive(false);
list.setServerSide(true);
list.setSearchValueJsCallbackName("searchValueCallback");
return list.toJson();
/**
* Servlet de gestion de la YbList
*/
public class UpdateListServlet extends YbListUpdateServlet {
@Override
public YbListServerData update(YbListUpdateServletParams params) {
YbListServerData serverData;
String search = params.getDraw();
try {
String search = params.getSearch().getValue();
int start = params.getStart();
int length = params.getLength();
int pageNumber = (params.getStart() / params.getLength()) + 1;
// Here is where you fetch you data and transform them into the according fomart
MyApiCaller api = new MyApiCaller();
MyResponse response = api.getData(pageNumber, search);
List<Map<String, YbCell>> data = MyParser.parse(response);
serverData = new YbListServerData(data, draw, nbResults, nbResults);
} catch(Exception e) {
serverData = new YbListServerData(null, draw, 0, 0);
serverData.setError("Error: " + e.getMessage());
}
return serverData;
}
@Override
public String getName() {
return getClass().getSimpleName();
}
}
Vous pourrez trouver un exemple détaillé dans la section Exemples