estoy tratando de mostrar el mensaje de los resultados de una validación de hecho en managed bean en el cuadro de diálogo, pero no se muestra en el diálogo sobre submit del formulario.

El favor de ayudarme en la fijación de este

Mi página JSF fragmento de diálogo con

<p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true"
appendToBody="true" resizable="true" modal="true" height="320px"
width="38%">
<h:form id="addLpc">
<div align="center" style="margin-bottom: 1px; padding-bottom: 1px;">
<h:outputLabel value="Add New LPC"
style="font-color:#000000;font-weight:bold;font-size:24px;padding-bottom:1px;"></h:outputLabel>
</div>
<div align="center">
<p:messages id="lpcDlgMsg" showDetail="false" autoUpdate="true"
closable="true" />
<p:messages id="lpcDlgMsg2" for="lpcDlgMessage" showDetail="false"
autoUpdate="true" closable="true" />
<h:panelGrid id="addLpcForm" columns="2" appendToBody="true">
<h:outputText value="LPC ID" />
<p:inputText id="lpcId" value="#{lpcBean.lpcId}" required="true"
requiredMessage="LPC ID is required">
<f:ajax event="blur" render="lpcDlgMsg" />
</p:inputText>
<h:outputText value="First Name" />
<p:inputText id="firstName" value="#{lpcBean.firstName}" />
.
.
.
.
</h:panelGrid>
</div>
<div align="center">
<p:commandButton id="submitButton" value="Submit" ajax="true"
update=":lpcForm:lpcDataTable,addLpc"
action="#{lpcBean.formSubmit}" oncomplete="dlg.hide()" />
<p:commandButton id="cancelButton" value="Cancel" 
onclick="dlg.hide()" />
</div>
</h:form>
</p:dialog>

mensaje con id lpcDlgMsg2 es el mensaje que estoy tratando de mostrar en enviar.El otro mensaje es conseguir que se muestra correcto en el desenfoque.

Fragmento de el método que se llama en presentar

public void formSubmit()
{
if(resultSet.next())
{
int lpcIdCount=rs.getInt("lpcCount");
if(lpcIdCount!=0)
{
FacesContext.getCurrentInstance().addMessage("lpcDlgMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR," ", "Duplicate LPCID"));
System.out.println("after display");
}
else
{
.
.
.
.
}
}
}   
}
InformationsquelleAutor rks | 2014-01-29

2 Comentarios

  1. 2

    Esta es mi sugerencia:

    <p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true"
    appendToBody="true" resizable="true" modal="true" height="320px"
    width="38%">
    <h:form id="addLpc">
    <div align="center">
    <p:messages id="lpcDlgMsg" showDetail="false" autoUpdate="true"
    closable="true" />
    <h:panelGrid id="addLpcForm" columns="2" >
    <h:outputText value="LPC ID" />
    <p:inputText id="lpcId" required="true" />
    <h:outputText value="First Name" />
    <p:inputText id="firstName" required="true" />
    </h:panelGrid>
    </div>
    <div align="center">
    <p:commandButton id="submitButton" value="Submit" 
    oncomplete="if (!args.validationFailed){dlg.hide();}" />
    <p:commandButton id="cancelButton" value="Cancel" 
    onclick="dlg.hide()" />
    </div>
    </h:form>
    </p:dialog>

    Nota que he simplificado el código con el fin de evitar el uso de un managedbean.

    Si quieres que tu managed bean para realizar la validación, el uso RequestContext para ejecutar de forma condicional el código que se cierre el cuadro de diálogo y quitar el oncomplete de Presentar botón.

    if (success) {
    RequestContext.getCurrentInstance().execute("dlg.hide()");
    }else{
    //show all the messages you need here
    }
    • Hola Daniel,la Llamada al método en el managed bean en necesario como lo estoy haciendo algunos de verificación en la base de datos y si la clave primaria(LPCID) es duplicado, a continuación, el mensaje de error debe ser mostrado en el cuadro de diálogo sin permitir enviar.
  2. 0

    Tienes que añadir esto de javascript en primer lugar dentro de la etiqueta head

    function handleComplete(xhr, status, args) {
    if (!args.validationFailed) {
    dlg.hide();
    } else {
    }
    }

    Más cambios se

    <p:commandButton id="submitButton" value="Submit" ajax="true"
    update=":lpcForm:lpcDataTable,addLpc :lpcDlgMsg2"
    actionListener="#{lpcBean.formSubmit}" oncomplete="handleComplete(xhr, status, args)" />

    de acción para actionListener porque la acción ha de Cadena tipo de retorno.
    Esto funcionará bien.

Dejar respuesta

Please enter your comment!
Please enter your name here