cancel
Showing results for 
Search instead for 
Did you mean: 

Java-backed Web Scripts interface utilisateur

michel
Champ in-the-making
Champ in-the-making
Bonjour,

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.
24 REPLIES 24

thomasb
Champ in-the-making
Champ in-the-making
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)

bertrandf
Champ on-the-rise
Champ on-the-rise
En fait il n'y a pas grand chose dans ma classe Java :

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>

michel
Champ in-the-making
Champ in-the-making
Tu sais poster aussi le FTL et le fichier desc.xml (avec leur nom de fichier)?

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.

thomasb
Champ in-the-making
Champ in-the-making
Ouaip, à mon avis, déclaration Spring mal placée et donc pas lue par Spring…

michel
Champ in-the-making
Champ in-the-making
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…

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.xml

selector.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

thomasb
Champ in-the-making
Champ in-the-making
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".

bertrandf
Champ on-the-rise
Champ on-the-rise
Merci pour vos réponses.

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.

thomasb
Champ in-the-making
Champ in-the-making
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

bertrandf
Champ on-the-rise
Champ on-the-rise
Ok, merci.

Je vais regarder ca et vérifier si mon AMP est bien construit, j'avais pas vu la doc sur le wiki.

Encore merci.

bertrandf
Champ on-the-rise
Champ on-the-rise
Bon alors quand je modifie le module-content.xml en y enlevant un "<" par exemple, l'alfresco ne se lance pas et il y a plein d'erreurs ce qui signifirait que la déclaration Spring est bien lue.

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.