Ajax call to the result of long-running process
llamer Mar 27, 2012 3:12 AMHi, All.
I have a problem with getting result of long-running process, it returns null when the process is in progress.
I've tried to make like discribes here http://docs.jboss.com/seam/2.0.1.GA/reference/en/html/conversations.html#d0e5208
I saw many topics in this forum, but didn't find any working example. Could you help me?...
Here the example i try to make it work:
I'm using Seam 2.2.0.GA.
someAction.page.xml
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.com/products/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.0.xsd"> <begin-conversation join="true"/> </page>
someAction.xhtml:
<a4j:region> <h:form> <a4j:poll id="poll" enabled="#{someAction.enablePolling}" reRender="consoleOutput,poll" /> </h:form> </a4j:region> <h:form> <a4j:jsFunction name="startBuild" action="#{someAction.startBuild}" /> <a4j:commandButton value="Start Build" action="#{someAction.startPolling}" oncomplete="startBuild()" reRender="poll" /> <hr/> <h:outputText id="consoleOutput" value="#{someAction.consoleOutput}" escape="false"/> </h:form>
SomeAction.java
@Name("someAction") @Scope(ScopeType.CONVERSATION) public class SomeAction { private static final int SLEEP_SEC = 1000; private static final int ENTIRIES = 10; private boolean enablePolling; private StringBuffer buildOutputSb = new StringBuffer(); private String consoleOutput; public boolean isEnablePolling() { return enablePolling; } public void setEnablePolling(boolean enablePolling) { this.enablePolling = enablePolling; } public void startPolling(){ this.enablePolling = true; } public String getConsoleOutput() { return this.buildOutputSb.toString(); } @Asynchronous public void startBuild(){ this.buildOutputSb = new StringBuffer(); //Stimulating the build process , which will output the log message to the buildOutputSb for (int i = 0; i < ENTIRIES; i++) { buildOutputSb.append("Output").append(i).append("<br/>"); try { Thread.sleep(SLEEP_SEC); } catch (InterruptedException e) { e.printStackTrace(); } } this.enablePolling = false; } }
I would be happy for any suggestions...