Java-backed Web Scripts interface utilisateur
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-20-2008 11:09 AM
Je suis en trains de voir comment fonctionne les Java-backed Web Scripts et j'ai une petite question:
Comment peut-on renvoyer des données au client (web en général) autrement que via:
res.getWriter().write("les données");
est-il possible d'utiliser une JSP ou quelque chose d'autre pour la présentation (style comme en FTL/javascript)?
Je passe via le java pour une question de performance…
Merci d'avance.
Michel.
- Labels:
-
Archive
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 06:54 AM
je dirais que peut-être le bean n'est pas correctement déclaré côté Spring
En fait j'ai repris l'exemple du wiki et quand je créé mon WebScript avec AbstractWebScript, il fonctionne bien.
Mais je n'arrive pas à le faire fonctionner avec DeclarativeWebscript, pourtant:
- j'etends bien la classe : org.alfresco.web.scripts.DeclarativeWebScript
- j'ai overridé la méthode protected Map<String, Object> executeImpl(WebScriptRequest req, Status status)
- et j'ai construis son modèle dans une Map ( Clef Valeur/objet)
En ce qui concerne l'intégration spring dans un fichier XML du bean et la description/intégration XML du web-script, je fais la même chose que l'exemple du wiki.
Donc, si je me fie aux messages ci-dessus:
<bean id="webscript.org.alfresco.audit.simple.get" class="package.et.nom.de.la.ClasseDuWebScript" parent="webscript"></bean>
?L'intégration spring dans un fichier XML du bean est bien la même que j'etende la classe AbstractWebScript ou la classe DeclarativeWebscript ?
Oui (mises à part les dépendances).
En ce qui concerne le fichier template, je l'ai nommé : nomWS.get.html.ftl et je l'ai placé au même endroit que la description du WS (nomWS.get.desc.xml), c'est bien ce qu'il faut faire?
Y-a-t-il qqch à préciser quelque part pour indiquer qu'il faut utiliser mon fichier ftl (dans la classe java ou dans la déclaration du WS) ou cela se fait implicitement vu le nom du template?
Non non, la simplicité du "web script framework" tient entre autres de cette démarche de convention de nommage.
Éventuellement, peut-on voir le code complet de la classe Java ? (et la déclaration Spring, tant qu'à faire)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 07:51 AM
package org.alfresco.module.auditscript;import java.util.HashMap;import java.util.Map;import org.alfresco.web.scripts.DeclarativeWebScript;import org.alfresco.web.scripts.WebScriptException;import org.alfresco.web.scripts.WebScriptRequest;import org.alfresco.web.scripts.Status;public class SimpleWebScript extends DeclarativeWebScript{ @Override protected Map<String, Object> executeImpl(WebScriptRequest req, Status status) { try { Map<String, Object> model = new HashMap<String, Object>(); model.put("Var", "Hello World"); return model; } catch(Exception e) { throw new WebScriptException("Erreur"); } } }
<bean id="webscript.org.alfresco.audit.simple.get" class="org.alfresco.module.auditscript.SimpleWebScript" parent="webscript"></bean>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 10:03 AM
Ainsi on peut voir les quelques petites subtilités qui existe dans le nommage du bean et aussi à quel endroit tu les mets sur le fileSystem.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 10:10 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 10:24 AM
En ce qui concerne le fichier template, je l'ai nommé : nomWS.get.html.ftl et je l'ai placé au même endroit que la description du WS (nomWS.get.desc.xml), c'est bien ce qu'il faut faire?
et surtout:
<bean id="webscript.org.alfresco.audit.simple.get" class="org.alfresco.module.auditscript.SimpleWebScript" parent="webscript">
</bean>
J'ai toujours utilisé les même noms…
ex:
pour le bean:
<bean id="webscript.be.etnic.alfresco.webscript.selector.get" class="be.etnic.alfresco.webscript.Selector" parent="webscript">
et pour le ftl et le fichier desc.xmlselector.get.html.ftl
et selector.get.desc.xml
les 2 se trouvant dans:
%TOMCAT%\webapps\alfresco\WEB-INF\classes\alfresco\extension\templates\webscripts\be\etnic\alfresco\webscript
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 10:32 AM
Perso, j'aime pas trop ceci:En ce qui concerne le fichier template, je l'ai nommé : nomWS.get.html.ftl et je l'ai placé au même endroit que la description du WS (nomWS.get.desc.xml), c'est bien ce qu'il faut faire?
et surtout:<bean id="webscript.org.alfresco.audit.simple.get" class="org.alfresco.module.auditscript.SimpleWebScript" parent="webscript">
</bean>
J'ai toujours utilisé les même noms…
eh eh, bien joué !
Qu'est-ce que je disais: mauvaise déclaration Spring: comme dit et répété (pour chaque exemple) sur la page de wiki dont le lien a déjà donné:
The naming convention of the Spring bean declaration is important.
- The prefix “webscript” is picked up by the Web Script engine. In this way, it knows that the bean you are declaring is a web script implementation.
- The ending “get” is picked up by the Web Script engine. It tells the Web Script engine which HTTP method to handle. In this case, an HTTP GET.
- The rest is then assumed to be the package and name of the Web Script.
Donc effectivement, si le webscript s'appelle "nomWS.get", et placé disons dans org/alfresco/audit, le nom du bean doit être "webscript.org.alfresco.audit.nomWS.get".
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 10:50 AM
Mes noms de fichiers sont les suivants : simple.get.desc.xml et simple.get.html.ftl donc je ne pense pas que l'erreur soit ici.
Contenu de mon simple.get.desc.xml :
<webscript> <shortname>The Simplest AUDIT Webscript</shortname> <description>WS de test</description> <url>/audit/simple</url> <authentication>admin</authentication> <format default="">argument</format></webscript>
Contenu de mon simple.get.html.ftl :
<html> <head> </head> <body> ${Var} </body></html>
Par contre mes fichiers se trouve dans :
%TOMCAT%\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\audit
J'utilise un AMP pour déployer mon WebScript et je ne sais pas si les différents fichiers sont mis au bon endroit.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 11:06 AM
Mes noms de fichiers sont les suivants : simple.get.desc.xml et simple.get.html.ftl donc je ne pense pas que l'erreur soit ici.
OK, très bien.
Par contre mes fichiers se trouve dans :
%TOMCAT%\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\audit
Ok, donc le nom du bean doit bien être "webscript.org.alfresco.audit.simple.get".
J'utilise un AMP pour déployer mon WebScript et je ne sais pas si les différents fichiers sont mis au bon endroit.
Donc je continue de penser que la déclaration Spring n'est pas lue.
Un moyen simple de tester: mettre une erreur dans le XML (virer un "<" ou ">" quelconque), si Alfresco démarre, c'est qu'il ne lit pas le fichier.
…pourtant avec un AMP, c'est plutôt simple: un "module-context.xml" dans config/alfresco/module/<nom-de-mon-module>/, où <nom-de-mon-module> est le nom indiqué dans "module.id" dans le "module.properties" (c'est une erreur dans le BlankProject.zip qu'on trouve sur share.alfresco.com / community.alfresco.com, module.id indique sdk_blank_project au lieu de blank_project), cf. la doc ici et là
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 11:11 AM
Je vais regarder ca et vérifier si mon AMP est bien construit, j'avais pas vu la doc sur le wiki.
Encore merci.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-10-2009 12:15 PM
J'ai revu la structure de mon build.xml en me basant sur le BlankProject et j'obtenais une nouvelle erreur lors de l'appel du WS :
Exception: org.alfresco.web.scripts.WebScriptException - Web Script format '' is not registered
J'ai solutionné mon problème en retirant la ligne :
<format default="">argument</format>
de mon fichier simple.get.desc.xml.Je vous remercie pour votre aide, mon Hello World marche enfin.
Je vais pouvoir passer au choses sérieuses.
Encore merci à vous 2.
