Создайте регистрацию на основе f:ajax с несколькими формами, чтобы каждая из них исчезла после шага

Я пытаюсь сделать регистрацию за несколько шагов, используя JSF. Все основано на f: ajax, потому что страница не должна быть перезагружена.

Когда я нажимаю кнопку "Показать первый шаг", появляется результат. Я нажимаю кнопку "Второй шаг" и появляется второй шаг. Но когда я нажимаю кнопку "ThirdStep", все исчезает, и я не вижу никаких шагов вообще. Нет разницы между кнопками "SecondStep" и "ThirdStep". Я не могу понять, почему этот код не работает.

Вот HTML:

<aside class="block">
    <h:form id="newform"> 
        <h:commandButton value="Show First Step">
            <f:ajax event="action" render="-allContent -firstStepForm" listener="#{stateBean.ajaxShowFirstStep}"></f:ajax>
        </h:commandButton>
    </h:form>

    <h:panelGroup id="allContent">
        <h:panelGroup id="firstStep">
            <ui:fragment rendered="#{stateBean.firstStep}">
                <span>AAAA</span>
                <h:form id="firstStepForm">
                    <h:commandButton value="SecondStep">
                        <f:ajax event="action" render="-allContent  -secondStepForm" listener="#{stateBean.ajaxShowSecondStep}"></f:ajax>
                    </h:commandButton>
                </h:form>
            </ui:fragment>
        </h:panelGroup>

        <h:panelGroup id="secondStep">
            <ui:fragment rendered="#{stateBean.secondStep}">
                <span>BBBB</span>
                <h:form id="secondStepForm">
                    <h:commandButton value="ThirdStep">
                        <f:ajax event="action" render="-allContent  -thirdStepForm" listener="#{stateBean.ajaxShowThirdStep}"></f:ajax>
                    </h:commandButton>
                </h:form>
            </ui:fragment>
        </h:panelGroup>

        <h:panelGroup id="thirdStep">
            <ui:fragment rendered="#{stateBean.thirdStep}">
                <span>CCCC</span>
                <h:form id="thirdStepForm">
                    <h:commandButton value="Finish">
                        <f:ajax event="action" render="-allContent" listener="#{stateBean.ajaxShowFinish}"></f:ajax>
                    </h:commandButton>
                </h:form>
            </ui:fragment>
        </h:panelGroup>

        <h:panelGroup id="finish">
            <ui:fragment rendered="#{stateBean.finish}">
                <span>FINISH!!!</span>

            </ui:fragment>
        </h:panelGroup>
    </h:panelGroup>
</aside>

А вот и боб:

@ManagedBean(name = "stateBean")
@ViewScoped
@Getter
@Setter
public class StateSavingBean implements Serializable{

private static final long serialVersionUID = 5264945113749405548L;

private Boolean firstStep;
private Boolean secondStep;
private Boolean thirdStep;
private Boolean finish;

public StateSavingBean() {

}

public void ajaxShowFirstStep(AjaxBehaviorEvent event) {
    setFirstStep(true);
    setSecondStep(false);
    setThirdStep(false);
    setFinish(false);
}

public void ajaxShowSecondStep(AjaxBehaviorEvent event) {
    setFirstStep(false);
    setSecondStep(true);
    setThirdStep(false);
    setFinish(false);
}

public void ajaxShowThirdStep(AjaxBehaviorEvent event) {
    setFirstStep(false);
    setSecondStep(false);
    setThirdStep(true);
    setFinish(false);
}

public void ajaxShowFinish(AjaxBehaviorEvent event) {
    setFirstStep(false);
    setSecondStep(false);
    setThirdStep(false);
    setFinish(true);
}

}

Если я удалю "-allContent" из атрибута рендеринга f: ajax, я смогу пройти все шаги до конца, но предыдущие и последующие шаги не будут скрыты.

Пожалуйста, помогите мне найти решение.

Я использую:

Сервер: Сервер приложений JBoss 7.1,

JSF: javax.faces-2.2.0-20130214.084242-247.jar

Конфигурация Лица:

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                        http://java.sun.com/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">
</faces-config>

Веб-модуль: 3.0

Некоторые ответы:

  1. Символ разделителя был изменен в web.xml:

    <context-param>
        <param-name>javax.faces.SEPARATOR_CHAR</param-name>
        <param-value>-</param-value>
    </context-param>
    
  2. Я попытался без h:panelGroup id="allContent", и я рендерил только показанную panelGroup, которую я хочу скрыть, и следующую, которую я хочу показать. Результат был таким же.

  3. Я также пытался использовать MyFaces 2.1.10, Mojarra 2.0.3-FCS, и результат был таким же. BalusC написал, что это может быть ошибка, исправленная в JSF 2.2, но у меня все еще есть эта проблема.

Надеюсь, кто-нибудь поможет мне. Спасибо!

0 ответов

Другие вопросы по тегам