Отображение вывода консоли в веб-приложении - PullRequest
0 голосов
/ 21 марта 2011

Я хочу создать веб-приложение, которое выполняет сборку maven на сервере и отображает вывод консоли сборки в процессе работы. Я ищу что-то похожее на то, что доступно в Гудзоне.

Я прочитал решение, приведенное здесь: Необходимо выполнить скрипт оболочки из веб-приложения и отобразить вывод консоли на странице

Хорошо, я могу запустить скрипт и получить весь вывод, но я хочу, чтобы пользовательский интерфейс обновлялся по мере сборки. Как мне это сделать?

Возможно ли это сделать с помощью компонентов JSF и Jboss Richfaces?

1 Ответ

1 голос
/ 21 марта 2011

Да, вы можете сделать это, используя Richfaces <a4j:poll>, который будет периодически опрашивать запрос к серверу.Например,

Просмотр:

<a4j:region>
        <h:form>        
            <a4j:poll id="poll"  enabled="#{testBean.enablePolling}" reRender="consoleOutput,poll" />
        </h:form>
</a4j:region>

<h:form>
    <a4j:jsFunction name="startBuild" action="#{testBean.startBuild}" />
    <a4j:commandButton value="Start Build"  action="#{testBean.startPolling}" oncomplete="startBuild()"  reRender="poll"/>  
    <hr/>
    <h:outputText id="consoleOutput" value="#{testBean.consoleOuput}" escape="false"/>
</h:form>

MBean:

public class TestBean {

    private boolean enablePolling;
    private StringBuffer buildOutputSb = new StringBuffer();

    public TestBean() {
    }

        public boolean isEnablePolling() {
        return enablePolling;
    }

    public void setEnablePolling(boolean enablePolling) {
        this.enablePolling = enablePolling;
    }

    public void startPolling(){
        this.enablePolling = true;
    }

    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 <10 ; i++){
            buildOutputSb.append("Output").append(i).append("<br/>");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }   
        this.enablePolling = false;
    }

}

Сообщения журнала, выдаваемыеСценарий сборки добавляется к строковому буферу (buildOutputSb), и мы используем <h:outputText id="consoleOutput"> для отображения значения из этого строкового буфера в пользовательском интерфейсе.

После нажатия кнопки «Начать сборку», enablePollingсвойства будут иметь значение true, что разрешит <a4j:poll id="poll"> и заставит его периодически опрашивать сервер.В то же время, startBuild() (т.е. процесс сборки) будет запущен. <a4j:poll id="poll" > будет reRender (т.е. обновлять) <h:outputText id="consoleOutput"> после каждого раунда опроса, так что это все равно что обновить <h:outputText id="consoleOutput"> и, следовательно,обновляя сообщения журнала сценария сборки.

Поскольку <a4j:poll> будет отправлять запрос для каждого раунда пула, я регистрирую MBean в session scope, чтобы предотвратить его создание много раз.

Вы можете обратиться к официальной демоверсии 1031 * для получения дополнительной информации о <a4j:poll> и лучших методах ее использования.Например, предлагается, чтобы была отдельная форма для <a4j:poll> и окружающая <a4j:poll> с <a4j:region>

...