2011-01-25 9 views

risposta

1

Eseguirlo nel metodo @PostConstruct del bean con scope richiesta che è associato alla pagina JSF requsted di EL come #{bean}.

@ManagedBean 
@RequestScoped 
public class Bean { 

    @PostConstruct 
    public void init() { 
     // Here. 
    } 

} 

estraneo alla domanda, mi chiedo solo perché si dovrebbe mai fare in questo modo? JSF/PrimeFaces offre modi molto più belli utilizzando <f:ajax> e <p:ajax> e consorts.

È l'intenzione di eseguirlo durante gli eventi unload o beforeunload di Windows? Se è così, allora devo avvertirti che questo non è affidabile. Dipende dal browser se tale richiesta raggiungerà effettivamente il server o meno. Più spesso non lo farà. Usalo solo per scopi puramente statistici o di pulizia prematura, non per scopi aziendali sensibili.

+0

posso avere, in qualsiasi momento, fino a 5 applicazioni in esecuzione, ciascuno con la propria sessione. Mentre l'utente passa da App a App, mantengo le altre applicazioni "vere" in modo che non vadano in time out per negligenza. Tuttavia, una volta scaduta l'app "attiva", ho bisogno di "disconnettere" gli altri per assicurarmi che non restino intorno. Ho 1 app servlet, 3 app puntate e 1 app JSF. Qualunque potrebbe essere l'App "attiva" in qualsiasi momento. –

+1

Se vengono eseguiti nello stesso contenitore, è sufficiente consentire a tutti di condividere la stessa sessione. Ad esempio, in Tomcat, è possibile ottenere ciò con 'emptySessionPath =" true "' in '' in '/ conf/server.xml'. – BalusC

+0

Grazie, questo è quello che ho suggerito, ma queste sono app in esecuzione su Weblogic. Non penso che possano garantire che i dati di un'app non entrino in collisione con gli altri. In altre parole, non penso che possano condividere una singola sessione senza calpestare l'un l'altro. –

4

Quello che ho fatto in genere è mettere una p nascosta: commandLink sulla pagina, quindi fare in modo che Javascript chiami l'evento click() su di esso.

<p:commandLink id="hiddenLink" 
    actionListener="#{bean.methodToInvoke}" style="display:none"/> 

Poi

$('#hiddenLink').click(); 
+0

Ottima idea. Ma come passare i parametri al bean? –

+0

Dipende se questi parametri sono fissi o devono essere modificati lato client tramite javascript. Se non cambiano, puoi usare f: attribute. Se potrebbero cambiare lato client, ho usato h: inputHidden altrove nel modulo per inviarli al bean gestito. – wrschneider

+0

Nel mio caso, l'elemento da NON ha l'id "hiddenLink". Invece, è dato l'id "j_idt5: hiddenLink". Pertanto, non riesco a trovarlo. – gromit190

16

RemoteCommand è un bel modo per raggiungere tale perché ti offre una funzione JavaScript che fa la roba (chiamando il backup di fagioli, rinfrescante, presentando una forma ecc, tutto quel link di comando può fare).

Da PrimeFaces 3.4 documentation:

<p:remoteCommand name="increment" actionListener="#{counter.increment}" 
out="count" /> 

<script type="text/javascript"> 
function customFunction() { 
    //your custom code 
    increment(); //makes a remote call 
} 
</script> 
Problemi correlati