2012-06-20 2 views
2

J'ai une page contenant un PrimeFaces (2.2.1) composant Editor, un bouton Actualiser et un selectOneMenu, dont la sélection affecte le contenu de l'éditeur, comme suit:Comment actualiser la page dans JSF dans la sélection selectOneMenu?

<p:editor id="uploadedText" value="#{facilityDataUploadBean.uploadedText}" 
      width="600" height="180" disabled="true" controls="" /> 
<h:commandButton value="Refresh" immediate="true" /> 
<h:selectOneMenu id="skipLines" styleClass="dropdown" 
       value="#{facilityDataUploadBean.skipLines}"> 
    <f:selectItems value="#{facilityDataUploadBean.skipLinesList}" /> 
    <f:ajax listener="#{facilityDataUploadBean.importParameterChanged}" /> 
</h:selectOneMenu> 

facilityDataUploadBean.importParameterChanged mises à jour facilityDataUploadBean.uploadedText. Après avoir modifié la valeur de selectOneMenu, l'opérateur appuie sur le bouton Actualiser pour actualiser la page, y compris le contenu du p:editor. (Je ne peux pas simplement rafraîchir le p:editor en utilisant AJAX, car il ne rendra pas correctement le rendu, au moins dans PF 2.2.1.)

Il semble que je devrais être en mesure d'accomplir l'actualisation de la page automatiquement lorsque le selectOneMenu La valeur est modifiée, mais j'ai été incapable de trouver une combinaison d'attributs et d'événements qui le feront. J'ai essayé diverses combinaisons de onchange="submit();", immediate="true" et valueChangeListener sur le selectOneMenu, ainsi que execute="@all/@form", render="@all/@form" sur l'événement f:ajax, le tout en vain. Ma solution de contournement actuelle consiste à afficher un message demandant à l'utilisateur d'appuyer sur le bouton Actualiser chaque fois qu'ils changent la sélection selectOneMenu - jolie hokey.

Répondre

4

Invoke window.location.replace(window.location.href) plutôt que submit() en cas onchange, comme dans:

<h:selectOneMenu id="skipLines" ... onchange="window.location.replace(window.location.href);"> 
    <f:selectItems ... /> 
    <f:ajax ... /> 
</h:selectOneMenu> 
+1

De temps en temps, une modification du selectOneMenu ne prend pas en compte - peut-être que l'actualisation de la page se produit avant que l'AJAX qui définit la valeur dans le bean backing s'exécute. Mais je ne l'ai pas vu quitter l'interface utilisateur dans un état incohérent ou montrant une valeur différente de celle actuellement détenue par le bean backing (qui est SessionScoped). –

1

s'il vous plaît essayer l'approche onchange="window.location.reload();" comme:

<h:selectOneMenu id="skipLines" ... onchange="window.location.reload();"> 
    <f:selectItems ... /> 
    <f:ajax ... /> 
</h:selectOneMenu> 

Cela fonctionne très bien dans mon environnement (GF 3.1.1, PF 3.2), mais s'il vous plaît être conscient qu'il ya la possibilité d'interrompre certains ajax functinality.

Espérons que cela aide, amusez-vous!

+0

Quand je fais cela, je reçois le même dialogue que [cette question] (http://stackoverflow.com/questions/4869721/reload-browser-window-after-post-sans-invite-user-to-resend-post-data) se plaint de. La solution, cependant, est d'utiliser 'window.location.replace (window.location.href)' plutôt que 'window.location.reload()', ce qui est la réponse à [cette question] (http://stackoverflow.com/questions/296685/page-auto-reload-with-parameters) m'a informé. –

+0

Super d'entendre que vous avez trouvé une solution qui a fonctionné pour vous! À votre santé! – SimonSez

Questions connexes