Primefaces消息未显示

时间:2014-08-26 09:57:46

标签: jsf primefaces

我在尝试了很多解决方案之后写了这个问题,但是它们没有工作

我正在开发一个读取卡片的应用程序(使用javaCard)。如果没有检测到卡,我需要向用户显示一条消息告诉他。

这是我的xhtml文件:interogerPC.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui" template="/templates/template.xhtml">

    <ui:define name="title">M2M Group</ui:define>

    <ui:define name="header">
        <ui:include src="/templates/headers/header.xhtml" />
    </ui:define>

    <ui:define name="sider">
        <ui:include src="./sider.xhtml" />
    </ui:define>

    <ui:define name="body">

        <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
            codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">
            <param name="CODE" value="com.m2m.utils.AppletWeb.class" />
            <param name="type" value="application/x-java-applet" />
            <param name="scriptable" value="true" />
            <param name="ARCHIVE" value="../../AppletWeb.jar" />
            <param name="permissions" value="all-permissions" />
            <embed type="application/x-java-applet" hidden="true"
                code="com.m2m.utils.AppletWeb.class" archive="../../AppletWeb.jar"
                scriptable="true"
                pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html" />
        </object>

        <h:form id="interogerPC">
            <div align="center">
                <p:panel header="Données Permis de Conduire">

                    <p:messages id="messages" showDetail="true" autoUpdate="true"
                        closable="true" />

                    <h:panelGrid columns="2" cellspacing="5">

                        <p:outputLabel for="nom_ar" value="Nom Arabe :" />
                        <p:inputText id="nom_ar" value="#{permisView.permis.nomArabe}" />

                        <p:outputLabel for="prenom_ar" value="Prénom arabe :" />
                        <p:inputText id="prenom_ar"
                            value="#{permisView.permis.prenomArabe}" />

                        <p:outputLabel for="nom_fr" value="Nom Français :" />
                        <p:inputText id="nom_fr" value="#{permisView.permis.nom}" />

                        <p:outputLabel for="prenom_fr" value="Prenom Français :" />
                        <p:inputText id="prenom_fr" value="#{permisView.permis.prenom}" />

                        <p:outputLabel for="cin" value="CIN :" />
                        <p:inputText id="cin" value="#{permisView.permis.cin}" />

                        <p:outputLabel for="adresse" value="Adresse :" />
                        <p:inputTextarea id="adresse" rows="3"
                            value="#{permisView.permis.adresse}" />

                        <p:outputLabel for="date_naissance" value="Date Naissance :" />
                        <p:calendar id="date_naissance" pattern="dd/MM/yyyy"
                            value="#{permisView.permis.dateNaissance}" />

                        <p:outputLabel for="lieu_naissance" value="Lieu Naissance :" />
                        <p:inputText id="lieu_naissance"
                            value="#{permisView.permis.lieuNaissance}" />

                        <p:outputLabel for="date_delivrance" value="Date Delivrance :" />
                        <p:calendar id="date_delivrance" pattern="dd/MM/yyyy"
                            value="#{permisView.permis.dateDelivrance}" />


                        <p:outputLabel for="pc" value="Numéro Permis :" />
                        <p:inputText id="pc" value="#{permisView.permis.numero}" />

                        <p:outputLabel for="points" value="Points :" />
                        <p:inputText id="points" />

                        <p:outputLabel for="categoie" value="Catégorie :" />
                        <p:selectManyCheckbox id="categoie">
                            <f:selectItem itemLabel="A1" itemValue="A1" />
                            <f:selectItem itemLabel="A" itemValue="A" />
                            <f:selectItem itemLabel="B" itemValue="B" />
                            <f:selectItem itemLabel="C" itemValue="C" />
                        </p:selectManyCheckbox>

                        <p:outputLabel for="categoie2" />
                        <p:selectManyCheckbox id="categoie2">
                            <f:selectItem itemLabel="D" itemValue="D" />
                            <f:selectItem itemLabel="EB" itemValue="EC" />
                            <f:selectItem itemLabel="EB" itemValue="EB" />
                            <f:selectItem itemLabel="ED" itemValue="ED" />
                        </p:selectManyCheckbox>

                    </h:panelGrid>

                    <p:commandButton value="Consulter" onclick="lirePC()">
                        <p:ajax update="interogerPC"/>

                    </p:commandButton>

                    <p:remoteCommand name="remplir" action="#{permisView.lirePermis}">
                    </p:remoteCommand>


                    <script type="text/javascript">

                        function lirePC() {

                            try {


                                document.embeds[0].getPublicDataPC();

                                remplir([ {
                                    name : 'PC1',
                                    value : document.embeds[0].PC1
                                }, {
                                    name : 'PC2',
                                    value : document.embeds[0].PC2
                                }, {
                                    name : 'PC3',
                                    value : document.embeds[0].PC3
                                } ])            

                            } catch (err) {
                                remplir([ {
                                    name : 'PC1',
                                    value : ''
                                }, {
                                    name : 'PC2',
                                    value : ''
                                }, {
                                    name : 'PC3',
                                    value : ''
                                } ])

                            }               

                        }


                    </script>
                </p:panel>
            </div>
        </h:form>
    </ui:define>

</ui:composition>

这里是lirePermis()函数:

     public String lirePermis() {
        System.out.println("lire Permis");
        Map<String, String> params = FacesContext.getCurrentInstance()
                .getExternalContext().getRequestParameterMap();

        String PC1, PC2, PC3;

        permis = new PermisVO();
        PC1 = params.get("PC1");
        PC2 = params.get("PC2");
        PC3 = params.get("PC3");
        if (PC1 == "" || PC2 == "" || PC3 == "") {
            permis = new PermisVO();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur!", " Aucun permis détecté"));
                        System.out.println("pas de permis");
        }
        else {
            permis = permisService.getPermis(PC1, PC2, PC3);
            System.out.println(permis);         
        }
        return returnPath;
    }

1 个答案:

答案 0 :(得分:1)

我发现了问题: 当函数lirePermis()结束执行时,我返回&#34; returnPath&#34;这是我的xhtml页面的路径,因此导致整个页面的刷新,这就是为什么我丢失了我的p:消息,

解决方案是不返回任何内容(无效)

public void lirePermis() {
    Map<String, String> params = FacesContext.getCurrentInstance()
            .getExternalContext().getRequestParameterMap();

    String PC1, PC2, PC3;

    permis = new PermisVO();
    PC1 = params.get("PC1");
    PC2 = params.get("PC2");
    PC3 = params.get("PC3");
    if (PC1 == "" || PC2 == "" || PC3 == "") {
        permis = new PermisVO();
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur!", " Aucun permis détecté"));

        //context.addMessage("notification", new FacesMessage(FacesMessage.SEVERITY_ERROR," Aucun permis détecté!!",null));
        System.out.println("pas de permis");
    }
    else {
        permis = permisService.getPermis(PC1, PC2, PC3);
        System.out.println(permis);         
    }

}

然后我发现另一个问题,就是消息立即消失,当我用Google搜索时,我发现我需要添加一点&#34;返回false;&#34;在调用我的javascript函数后:

<p:commandButton value="Consulter" onclick="lirePC();  return false;">
    <p:ajax update="interogerPC" />
</p:commandButton>