L'attributo rendered
del componente JSF è un'impostazione lato server che controlla se JSF deve generare o meno l'HTML desiderato.
attributi del tag <f:ajax>
render
dovrebbe puntare a una (relativa) ID client dell'elemento HTML JSF-generated che JavaScript può afferrare da document.getElementById()
da HTML DOM albero al fine di sostituire il contenuto sul totale della richiesta Ajax.
Tuttavia, poiché si specifica l'ID client di un elemento HTML che non viene mai visualizzato da JSF (a causa di rendered
false
), JavaScript non può trovarlo nella struttura DOM HTML.
È necessario avvolgerlo in un componente contenitore che è sempre resi e quindi sempre disponibili nella struttura HTML DOM.
<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="messages" />
</h:commandButton>
<p>
<h:panelGroup id="messages">
<h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/>
<h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/>
</h:panelGroup>
</p>
Estranei al problema concreto, lì hai un possibile errore di progettazione. Perché non si solo creare una proprietà #{Bean.message}
, che si imposta con il messaggio desiderato nel metodo di azione, invece, in modo che si può semplicemente utilizzare:
<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="message" />
</h:commandButton>
<p>
<h:outputFormat id="message" value="#{Bean.message}" />
</p>
Grazie per la risposta. Quello che ho fatto è che ho usato render = "@ form" nel mio modulo e ha funzionato. Proverò comunque quello che hai suggerito. – sandra
Anche questo funzionerà, purché sia il genitore del componente che è * sempre * reso (esattamente come la mia risposta sta cercando di dirti). C'è forse solo un sovraccarico non necessario se il modulo contiene 10 altri componenti che non devono essere necessariamente aggiornati, ad esempio. – BalusC
possiamo aggiungere condizioni nel rendering ajax? –