Ричфэйс рендеринга с помощью a4j: ajax - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть страница, которая использует rich:fileUpload и a4j:commandButton, чего я хочу добиться, так это то, что при первой загрузке страницы появится файл fileUpload (будет отображаться, мой backingBean по умолчанию имеет значение true и поэтому он отображается правильно)и когда пользователь нажимает на кнопку Command, я бы хотел скрыть fileUpload и показать outputText (это не происходит, ошибки вообще нет)

Как я могу решить эту проблему, моя страница выглядит как

    <div id="content">
        <a4j:outputPanel id="contentForm">
            <h:form enctype="multipart/form-data"
                    rendered="#{uploadBean.formRendered}">

                <br/><br/>

                <h:selectOneRadio value="#{uploadBean.selectedOption}">
                    <f:selectItems value="#{uploadBean.loadOptions}"/>
                </h:selectOneRadio>

                <br/>

                <rich:fileUpload addLabel="Agregar" clearAllLabel="Quitar todos"
                                 clearLabel="Quitar" deleteLabel="Quitar"
                                 doneLabel="Completado" uploadLabel="Subir archivos"
                                 fileUploadListener="#{uploadBean.doUpload}"
                                 acceptedTypes="txt, csv"
                                 noDuplicate="true"/>

                <a4j:commandButton value="Iniciar validación"
                                   action="#{uploadBean.doLaunchProcess}"
                                   render="processLabel"
                                   execute="@form"
                                   />

            </h:form>
        </a4j:outputPanel>
        <a4j:outputPanel id="processLabel">
            <h:outputText
                value="#{uploadBean.processStarted}"
                rendered="#{not uploadBean.formRendered}"/>
        </a4j:outputPanel>
    </div>

и код действия commandButton:

public String doLaunchProcess() {
    formRendered = false;
    InfoValidator iv = new InfoValidator(loadOptions, 
            selectedOption, userBean.getDependencia(), 
            userBean.getTipoDependencia(), userBean.getUsuario(),
            userBean.getIdUsuario(), userBean.getEmail());
    iv.start();
    return "carga-archivos";
}

Похоже, что formRendered всегда оценивается как true, когда я хочу, чтобы оно было ложным, когда пользователь нажимает кнопку ипоэтому fileUpload скрывает и показывает outputText.

UPDATE В основном я хочу, чтобы пользователь загружал файлы, когда пользователь нажимает на кнопку, компонент fileUpload исчезает, а outputText появляется и говоритчто-то вроде «Спасибо за загрузку»

Может быть, мой подход неправильный, просто поставьте меня в правильном направлении, я вроде как путаюсь с AJAX.

Приветствия

1 Ответ

2 голосов
/ 03 февраля 2012

Наконец-то я это сделал!

Вот код, чтобы вы могли видеть изменения.По сути, мне пришлось обработать всю форму (execute="@form"), которую уже выполняет a4j: commandButton, а затем render="contentForm :processLabel".

Я только рендерил (reRendering?) Только processLabel и форма всегда была там 'потому что я не обновлял представление (я думаю, что это должно быть с деревом DOM, кто-то разъяснит это, пожалуйста)

    <div id="content">
        <a4j:outputPanel id="contentForm">
            <h:form enctype="multipart/form-data"
                    rendered="#{uploadBean.formRendered}">

                <br/><br/>

                <h:selectOneRadio value="#{uploadBean.selectedOption}">
                    <f:selectItems value="#{uploadBean.loadOptions}"/>
                </h:selectOneRadio>

                <br/>

                <rich:fileUpload addLabel="Agregar" clearAllLabel="Quitar todos"
                                 clearLabel="Quitar" deleteLabel="Quitar"
                                 doneLabel="Completado" uploadLabel="Subir archivos"
                                 fileUploadListener="#{uploadBean.doUpload}"
                                 acceptedTypes="txt, csv"
                                 noDuplicate="true"/>

                <a4j:commandButton value="Iniciar validación"
                                   action="#{uploadBean.doLaunchProcess}"
                                   render="contentForm :processLabel"/>

            </h:form>
        </a4j:outputPanel>
        <a4j:outputPanel id="processLabel">
            <h:outputText
                value="#{uploadBean.processStarted}"
                rendered="#{not uploadBean.formRendered}"/>
        </a4j:outputPanel>
    </div>

поддерживающий бин остается прежним.

Cheers !!!

...