我在尝试了很多解决方案之后写了这个问题,但是它们没有工作
我正在开发一个读取卡片的应用程序(使用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;
}
答案 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>