Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# XUL RDF et le cache

Envoyé par : jilome

Date : 04/05/2005 09:43

Bonjour,

Après avoir longuement parcourus les principaux sites autour de xul je me décide à initier cette discussion....

Nous développons actuellement une application xul accessible par http dans laquelle les différentes arbres sont associés à des templates RDF produits depuis des bases de données (le RDF est généré par du PHP en quelque sorte).

Nous rencontrons de très grandes difficultés avec la gestion des caches. Nous avons pourtant tout testé depuis les rebuild() refresh() les variables de configuration de firefox, .... Rien à faire, rien ne marche .... Les RDF restent inchangées...

Cordialement.

# Re: XUL RDF et le cache

Envoyé par : Lapinator

Date : 04/05/2005 10:16

la solution la plus simple est d'utiliser une variable qui change à chaque fois, j'ai repris l'idée du script de monitoring de OVH.

var appendix=Math.random();
var dsUrl=uriRDF+"gen_rdf.php?session="+session+"&a="+appendix;
tree.setAttribute('datasources', '');
tree.setAttribute('datasources', dsUrl);

si sa peut aider :)

# Re: XUL RDF et le cache

Envoyé par : jilome

Date : 04/05/2005 10:51

E X C E L L E N T E - I D E E

Je teste de suite et je complète !

Ca marche 5/5 sur un menupopup

  <script language="JavaScript">
     function updateLdap(m) {
	var update=Math.random();
	var dsUrl="ldap_rdf.php?update="+update;
	m.setAttribute('datasources',dsUrl);
}
  </script>

...

  <menupopup datasources="ldap_rdf.php" ref="urn:ldap:people" onpopupshowing="updateLdap(this)">

Reste un petit problème de flashing sur lequel je travail...

J'avais vu des choses proches avec les headers envoyés depuis PHP et expiry mais sans réussir à mettre en oeuvre ces solutions.

# Re: XUL RDF et le cache

Envoyé par : Lapinator

Date : 19/05/2005 23:41

je me suis réataché a ce pb, j'ai sortie ce code suivant qui refresh tres les datasources sans passer par l'astuce que je t'ai donner, j'ai fait ce bout de code en cherchant à faire éxecuté une fonction a la fin du téléchargement du datasources, en clair mettre un Observer sur le datasources ^^, je suis passer une fois n'est pas coutume par le XPCOM

voilà le bout de code commenté ^^

var Observer = {
onBeginLoad : function(sink){},
onInterrupt : function(sink){},
onResume : function(sink){},
onError : function(sink,status,msg){},
onEndLoad : function(sink){
	sink.removeXMLSinkObserver(this);
	sink.QueryInterface(Components.interfaces.nsIRDFDataSource);
	document.getElementById('treePays').view.selection.select(0);
}
};

var uniq=false;

function init(){
if(uniq) return;
uniq=true;
document.title='Liste des Pays';
loadDatasource()
}

function loadDatasource() {
var tree = document.getElementById('tree');
var dsUrl=uriRDF+"pays.php?session="+session+"&allpays";

//Ancien bout de code pour le chargement des droits
//treePays.setAttribute('datasources', '');
//treePays.setAttribute('datasources', dsUrl);

//netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var RDF =  Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
datasource = RDF.GetDataSource(dsUrl);
var remote = datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);

// on  ajoute L'Observer sur le datasource
datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver(Observer);


if (remote.loaded) {
	tree.database.AddDataSource(datasource);
	tree.builder.rebuild();
} else {		
	tree.database.AddDataSource(datasource);
}
}


function reloadTree(){
try {
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver(Observer);
	
	datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Refresh(false);
	tree = document.getElementById('tree');
} catch(e) {
	alert(e);
}
}

Un peut dure avec le petit cadre. Sinon pour les âmes attentifs, qui on remarqué que j'avais repris le code de http://www.xulfr.org/wiki/SourceDeDonnee(..) en lui apportant des modifications, je trouve que les codes suivants dans les 2 derniers blocs sont en trops et pause des problemmes de compréhension :

var sink = datasource.?QueryInterface(Components.interfaces.nsIRDFXMLSink);

et

var sink = datasource.?QueryInterface(Components.interfaces.nsIRDFXMLSink);
sink.addXMLSinkObserver(Observer);

Par contre je rajouterai en dessous un petit texte qui expliquerait comment on peut rajouter un Observer dans les exemples si dessus

à savoir la création d'un observer:

var Observer = {
onBeginLoad : function(sink){},
onInterrupt : function(sink){},
onResume : function(sink){},
onError : function(sink,status,msg){},
onEndLoad : function(sink){
	sink.removeXMLSinkObserver(this);
	sink.QueryInterface(Components.interfaces.nsIRDFDataSource);
	//Selection du 1er élément de l'arbre quand celui ci est fini de charger
	//A noté aussi que cette commande envoie un signal onselect sur le tree
	document.getElementById('tree').view.selection.select(0);
}

et la liason sur un datasource de la façon suivante :

datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver(Observer);

Voilà, j'espere que ma contribution sera utile :p

# Re: XUL RDF et le cache

Envoyé par : laurentj

Date : 20/05/2005 10:38

Si tu trouves qu'il y a des choses obscures dans le wiki, édite directement les pages pour apporter les précisions ! n'attend pas qu'on te dise ok :-)

Le wiki est fait pour ça, pour que chacun puisse apporter sa contribution. Si on l'apporte dans le forum, ça va être perdu.. (qui ira lire ton message dans 3 mois ? :-p )

# Re: XUL RDF et le cache

Envoyé par : Lapinator

Date : 20/05/2005 19:50

J'ai apporté ma contribution sur http://www.xulfr.org/wiki/SourceDeDonnee(..). mais comme c'est la première fois que je fait une contribution faudra vérrifier ;o

# Re: XUL RDF et le cache

Envoyé par : laurentj

Date : 23/05/2005 10:42

Merci

# Re: XUL RDF et le cache

Envoyé par : Utilisateur anonyme

Date : 25/07/2005 19:03

ou tout simplement document.getElementById('id').builder.refresh() ...

c'était aussi simple que cela ! A+

# Re: XUL RDF et le cache

Envoyé par : laurentj

Date : 28/07/2005 17:49

sberthelot : justement non. ça ne fonctionne pas toujours.

# Re: XUL RDF et le cache

Envoyé par : neolao

Date : 05/10/2006 22:07

J'ai essayé la technique avec le Refresh, ça marche mal. Ca me reconstruit mon arbre en oubliant des items.

C'est dommage, parce que cette technique permet de garder les containers déployés.

Le post date de l'année dernière, alors peut-être qu'il y a du nouveau pour actualiser correctement la source de données.

En attendant, le random sur l'url marche mais c'est pas génial.

# Re: XUL RDF et le cache

Envoyé par : simboy

Date : 12/11/2006 17:37

La technique de lapinator est très séduisante, mais malheureusement elle ne fonctionne que dans le cas où on programme un composant mozilla installé sur le client. J'essaie de travailler sur une appli qui ne serait pas téléchargée sous la forme d'un plugin, mais simplement accessible à partir d'un site web. Du coup, impossible d'acceder aux interfaces privilégiées proposées. Et la solution qui consiste à hacker l'url à chaque requête donne un résultat assez mauvais.

Navigant sur le site de Mozilla, j'ai trouvé au moins trois bugs qui semble être liés à ce problème (68306, 241827 et 302090), le plus vieux datant de 2001, associés à des priorités dérisoires... (Peut-être qu'un vote massif sur ces bugs permettrait de les rappeler aux développeurs ?).

Quelqu'un serait-il tombé sur une solution élégante, au moins du point de vue de l'utilisateur, qui fonctionnerait dans le cas de fichiers xul hostés sur un serveur distant, donc sans les privilèges d'un plugin ?

# Re: XUL RDF et le cache

Envoyé par : optyler

Date : 15/11/2006 11:22

Bonjour,

je voulais juste comprendre à quoi servait la fonction reloadTree() puisqu'elle ne semble jamais etre appelée ...

merci :)

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.