Jsf PrimeFaces向导下一步按钮

Jsf PrimeFaces向导下一步按钮,jsf,primefaces,Jsf,Primefaces,我有一个带有两个选项卡的。在第一个选项卡上,有一个,用户需要选择一行继续。如果他们没有选择该行,我想阻止用户转到下一个选项卡并显示消息。我可以用此代码显示消息,但当他们单击“下一步”时,“下一步”按钮消失: public String onFlowProcess(FlowEvent event) { //si no eligen un afiliado, desplegar un error: "Debe elegir un afiliado para seguir" if (

我有一个带有两个选项卡的
。在第一个选项卡上,有一个
,用户需要选择一行继续。如果他们没有选择该行,我想阻止用户转到下一个选项卡并显示消息。我可以用此代码显示消息,但当他们单击“下一步”时,“下一步”按钮消失:

public String onFlowProcess(FlowEvent event) {
    //si no eligen un afiliado, desplegar un error: "Debe elegir un afiliado para seguir"

    if (afiliado.getSelectedAfi() == null) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage("Debe de elegir un afiliado para continuar."));

        return "afiliadoTab";
    } else {
        return event.getNewStep();
    }
}
如果需要的话,我可以把XHTML代码放进去。在上面的代码中,
afiliadoTab
是数据表所在的当前选项卡的名称。我告诉它,如果
afiliado
对象是
null
(如果用户没有选择行),则显示消息并停留在那里。“呆在那里”的做法效果不佳。我在这段代码中做错了什么吗

这是与问题(向导部分)相关的XHTML代码:


我终于找到了问题所在。由于某些原因,我不能使用
。我必须使用

使用
会使我的“下一步”按钮在单击“下一步”后消失


我希望这对其他人有所帮助。

请提供XHTML代码。关联bean的范围是什么?它至少应该是一个视图范围的bean,最好将这个验证任务委托给JSF验证器——一个自定义验证器。什么类型的自定义验证器?我不明白的是,在向导()的primeface showcase中,在onFlowProcess中,他们会返回“确认”以阻止用户进入下一个选项卡,“确认”是他们的确认选项卡的名称。您是否使用了命令组件所需的
<p:wizard flowListener="#{afiliadoController.onFlowProcess}">
    <!-- first tab -->
    <p:tab id="afiliadoTab" title="Afiliado">
        <p:panel header="Agrega un afiliado" id="panelAfiliado">
            <!-- <p:messages autoUpdate="true" for="validationAfiForm"/> -->
            <p:panelGrid columns="4"  layout="grid">
                <p:outputLabel for="nombres" value="Nombres:" />
                <p:inputText id="nombres" value="#{afiliadoController.afiliado.nombre}"
                             requiredMessage="Debe insertar un nombre."/>

                <p:outputLabel for="apellidos" value="Apellidos:" />

                <p:inputText id="apellidos" value="#{afiliadoController.afiliado.apellido}"
                             requiredMessage="Debe insertar un apellido."/>

                <p:outputLabel for="estadoCivil" value="Estado Civil:" />

                <p:selectOneMenu id="estadoCivil" effect="drop" value="#{afiliadoController.afiliado.estado_civil}"
                                 requiredMessage="Debe seleccionar un estado civil.">

                    <f:selectItem itemLabel="Estado Civil" itemValue=""/>
                    <f:selectItem itemLabel="Soltero" itemValue="S"/>
                    <f:selectItem itemLabel="Casado" itemValue="C"/>
                    <f:selectItem itemLabel="Union Libre" itemValue="U"/>
                    <f:selectItem itemLabel="Divorciado" itemValue="D"/>
                    <f:selectItem itemLabel="Viudo" itemValue="V"/>
                </p:selectOneMenu>

                <p:outputLabel for="direccion" value="Direccion:" />
                <p:inputText id="direccion" value="#{afiliadoController.afiliado.direccion}"/>
                <p:outputLabel for="telefono" value="Telefono:" />

                <p:inputMask id="telefono" value="#{afiliadoController.afiliado.telefono}" mask="(999) 999-9999"
                             requiredMessage="Debe insertar un telefono."/>

                <p:outputLabel for="fechaNacimiento" value="Fecha de Nacimiento:"/>

                <p:calendar id="fechaNacimiento" yearRange="c-100:c" pattern="yyyy/MM/dd" navigator="true"
                            value="#{afiliadoController.afiliado.fecha_nacimiento}"
                            requiredMessage="Debe insertar su fecha de nacimiento."/>

                <p:commandButton value="Insertar" icon="fa fa-save" process="panelAfiliado" update="afiliadoTable"
                                 actionListener="#{afiliadoController.insertAfiliado}" />
            </p:panelGrid>
        </p:panel>

        <p:panel header="Selecciona un Afiliado" id="panelTable">
            <!-- tabla con afiliados para seleccionar -->
            <p:dataTable id="afiliadoTable" var="afi" value="#{afiliadoController.afiliado.afiliados}" editable="true"
                         selection="#{afiliadoController.afiliado.selectedAfi}"
                         rowKey="#{afi.afiliado_id}" editMode="cell" >

                <p:column selectionMode="single" style="width:16px;"/>

                <p:column headerText="Afiliado ID">
                    <h:outputText value="#{afi.afiliado_id}"/>
                </p:column>

                <p:column headerText="Nombres">
                    <p:cellEditor>
                        <f:facet name="output"><h:outputText value="#{afi.nombre}" /></f:facet>
                        <f:facet name="input"><p:inputText value="#{afi.nombre}" style="width:96%"/></f:facet>
                    </p:cellEditor>
                </p:column>

                <p:column headerText="Apellidos">
                    <p:cellEditor>
                        <f:facet name="output"><h:outputText value="#{afi.apellido}" /></f:facet>
                        <f:facet name="input"><p:inputText value="#{afi.apellido}" style="width:96%"/></f:facet>
                    </p:cellEditor>
                </p:column>

                <p:column headerText="Eliminar">
                    <p:commandButton icon="fa fa-remove" value="Eliminar" process="afiliadoTable" update="afiliadoTable"
                                     actionListener="#{afiliadoController.deleteAfiliado(afi.afiliado_id)}" />
                </p:column>

                <f:facet name="footer">
                    <p:commandButton process="afiliadoTable" update=":wizard:afiliadoDetail" icon="ui-icon-search"
                                     value="Ver Afiliado" oncomplete="PF('afiliadoDialog').show()" />
                </f:facet>
            </p:dataTable>
        </p:panel>
    </p:tab>

    <!-- second tab -->
    <p:tab id="beneficiarioTab" title="Beneficiario">
        <p:panel header="Agrega Beneficiario">
            <!-- form para insertar beneficiario -->
        </p:panel>
        <p:panel header="Lista de Beneficiarios"></p:panel>
    </p:tab>
</p:wizard>