Hi, I played a little bit with ZK and Tapestry this morning and I achieved something quite nice : I succeeded in inserting a ZK component in Tapestry page, and this component can call Tapestry actions.
Here is how to do it : 1) Install ZK : 2) The Tapestry Component that allows including any ZK component : public class ZkComponent { @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) private String name; @Inject private RequestGlobals requestGlobals; @Inject private ComponentResources resources; boolean setupRender(MarkupWriter writer) throws ServletException, IOException { HttpServletRequest request = requestGlobals.getHTTPServletRequest(); HttpServletResponse response = requestGlobals.getHTTPServletResponse(); request.setAttribute("resources", resources); request.setAttribute("id", resources.getId()); CharResponseWrapper body = new CharResponseWrapper(response); request.getRequestDispatcher(name + ".zul").include(request, body); writer.writeRaw(body.toString()); return true; } public class CharResponseWrapper extends HttpServletResponseWrapper { private CharArrayWriter output; public String toString() { return output.toString(); } public CharResponseWrapper(HttpServletResponse response) { super(response); output = new CharArrayWriter(); } public PrintWriter getWriter() { return new PrintWriter(output); } } } 3) Use in Tapestry page : <t:ZkComponent t:id="testId" name="test"/> This will insert the test.zul component 4) ZK component with the Tapestry call : This component is a button. When you click on it, it fires an event to call the Tapestry action displaying a JSONArray("This is a test : ", param); param beeing the button name. <zk> <button id="${id}" label="Try" onClick="sendEventOnAction()"/> <zscript> import org.apache.tapestry5.ComponentEventCallback; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.internal.util.Holder; ComponentResources resources = execution.getAttribute("resources"); // Get button with id String id = execution.getAttribute("id"); Button btm = spaceOwner.getFellow(id); void sendEventOnAction(){ Object result = onAction(); alert("result = " + result); btm.label="ok"; } Object onAction() { // Manage trigger result final Holder holder = Holder.create(); ComponentEventCallback callback = new ComponentEventCallback() { public boolean handleResult(Object result) { holder.put(result); return true; } }; // Run event resources.triggerEvent("action", new Object[] {btm.label}, callback); return holder.get(); } </zscript> </zk> 5) Tapestry action Object onAction(String param) { return new JSONArray("This is a test : ", param); } I also tried with different ZK components, it seems to work pretty fine. I hope this can help some people. Best Regards, Julien & Jean for translating :D --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org