Exécutez la méthode avec ajax
<h:form id="formId">
<div id="uploadArea">
<!--...réduction...-->
<f:ajax event="change" execute="uploadArea" render="uploadArea" listener="#{uploadBean.uploadFile}" />
<!--...réduction...-->
<div>
<h:message for="uploadArea" errorClass="error" warnClass="warn" infoClass="info" />
</div>
</div>
</h:form>
J'ai défini un message comme contenu dans une méthode, mais il n'apparaît pas
public void uploadFile(AjaxBehaviorEvent event) throws IOException {
if (!isUpload()) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Aucun fichier n'a été sélectionné.");
event.getFacesContext().addMessage("uploadArea", message);
//...réduction...
HTML de sortie
<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="formId" value="formId">
<div id="uploadArea">
<!--...réduction...-->
<input id="formId:file" type="text" name="formId:file" style="display:none;" onchange="mojarra.ab(this,event,'change','uploadArea','uploadArea')">
<div>
</div>
</div>
<input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-7689768516583343150:2206148480801750608" autocomplete="off">
</form>
Apparemment, il n'a pas réapparu après l'exécution de la méthode f: ajax
.
render =" uploadArea "
... a été ignoré? La balise HTML est-elle inutile? Ne devrait-il pas s'agir d'une balise JSF?
Quelque chose qui n'est pas écrit dans les balises JSF n'est-il pas un composant?
The clientIds of components that will participate in the "render" portion of the Request Processing Lifecycle. ajax(JSF 2.2 View Declaration Language: Facelets Variant)
Exécutez la méthode avec ajax
<h:form id="formId">
<h:panelGroup id="uploadArea">
<!--...réduction...Puisqu'il s'agit d'une balise JSF, faites-en l'attribut id spécifié..-->
<f:ajax event="change" execute="formId:uploadArea" render="formId:uploadArea" listener="#{uploadBean.uploadFile}" />
<!--...réduction...-->
<div>
<h:message for="formId:uploadArea" errorClass="error" warnClass="warn" infoClass="info" />
</div>
</div>
</h:form>
S'affiche lors de la définition d'un message comme contenu dans une méthode
public void uploadFile(AjaxBehaviorEvent event) throws IOException {
//...réduction...Comme avant la correspondance...Changer uniquement l'attribut id spécifié...
event.getFacesContext().addMessage("formId:uploadArea", message);
//...réduction...Comme avant la correspondance...