2012-04-11 5 views
0

Ich habe ein Problem. Ich brauche js webscript von Java webscript ausführen. Ich weiß, wie es tun:Call-js-Webscript aus Java-Webscript in Alfresco

req.getRuntime().getContainer().getRegistry().getWebScript("com/home/testJs/testJs.get").execute(req, res) 

, aber wie das neue WebScriptRequest Objekt zu konstruieren? Ich muss es tun, um den Request-Pfad neu zu schreiben. Es ist ein echtes Problem für mich. Danke.

Antwort

3

Im Allgemeinen sollten Sie WebScriptRequestURLImpl verwenden. Ohne weitere Details ist es schwierig, tiefer zu gehen.

Das heißt, es ist im Allgemeinen eine schlechte Idee, noch einmal einen HTTP-Aufruf an sich selbst zu machen, um Ihr Problem zu beheben, es ist im Grunde ein Hinweis auf schlechte Modularisierung oder fehlende Wiederverwendung von Code.

Ich würde lieber den Teil des Codes, der sowohl in den JS und Java-Web-Skripts fließt ein Action, die Sie von beiden Orten aufrufen können, ohne die Eingabeparameter neu zu packen, oder schlechter senden sie über HTTP .

+0

Vielen Dank für die Antwort. Aber jetzt habe ich ein anderes Problem. Wenn ich nächstes js webscript mapping habe - "/ testUrl/{testVar1}/{testVar2}" und nächstes mapping für Java webscript, welches js webscript - "/ testUrl2/{origJs}" aufruft. Dann rufe ich Java-Skript mit der nächsten URL "testUrl2/testUrl/var1/var2" auf. Danach entferne ich in Java Code "testUrl2" und konstruiere WebScriptRequestURLImpl Objekt mit "/ testUrl/var1/var2" URL. – VladislavLysov

+0

Aber wenn ich WebScriptRequestURLImpl erstellen muss ich Match-Objekt mit TemplateUrl und TemplateVars erstellen. Aber wie bekomme ich: 1) templateUrl für "/ testUrl/var1/var2" wenn js webscript mehr als eine URL hat? 2) Wie bekomme ich templateVars von "/ testUrl/var1/var2" für js webscript? Vielen Dank. – VladislavLysov

+0

Sie vermissen die Hauptbemerkung, die ich gemacht habe: * Vermeiden * Aufruf eines Web-Skriptes innerhalb eines Web-Skript-Controllers, es ergibt keinen Sinn. Es ist wie eine E-Mail an Ihren siamesischen Zwillingsbruder zu senden. – skuro

0

Natürlich ist skuro richtig, dass es eine schlechte Idee ist, zweimal durch die HTTP-Schicht zu gehen.

Aber in der Tat die Ausführung sowohl , ist ein Skript-Controller und eine Java-Methode von Alfresco unterstützt direkt aus der Box - ohne hässliche kerben, und zweimal die gesamte HTTP-Schicht ohne Durchgang.

Sie können dies tun:

Setzen Sie Ihr Script-Code in der entsprechenden J-Datei.

Stellen Sie sicher, dass Ihre Java-Klasse eine Unterklasse von DeclarativeWebScript ist, überschreiben Sie und legen Sie Ihre benutzerdefinierte Logik dort.

Sicher, Sie können immer noch argumentieren, dass zwei Controller ist schlecht Stil. :)