2010-08-23 13 views
1

J'essaie d'implémenter un scénario utilisant JSF. J'ai un commandExButton et quand l'utilisateur clique sur ce bouton "A" il montre le panelDialog qui contient selectManyCheckBox articles. Je génère ces éléments dans le bean backend en analysant un fichier qui est continuellement mis à jour. Ce que je veux, c'est que, chaque fois que je clique sur ce bouton "A", je devrais obtenir les derniers selectItems en analysant le fichier via le bean backend. Mais ce que je reçois le même selectItem qui a été généré lors de la première page. Donc à partir de maintenant j'ai une solution de contournement, dans lequel j'ai inclus un bouton d'actualisation qui actualise réellement la page, puis l'utilisateur cliquez sur "A" pour obtenir le dernier selectItem en analysant le contenu du fichier actuel. Mais est-ce faisable de toute façon sans ajouter un nouveau bouton et en utilisant le bouton existant?Comment faire pour actualiser dynamiquement h: selectManyCheckbox selectItems

Voici le code que j'utilise

<td> 
    <hx:commandExButton id="preferenceButton" styleClass="form" value="#{nls.preferenceLink}" 
     title="#{nls.preferenceLinkTitle}" type="submit" /> 
</td> 
<td> 
    <h:form id="PrefForm" rendered="#{Test.isCurrent}"> 
     <hx:panelDialog type="modal" id="preferenceSet" styleClass="panelDialog" for="preferenceButton" 
      title="#{nls.preferenceDialogTitle}"> 
      <h:outputText styleClass="panelStartMessage" style="display:block;" 
       value="#{nls.preferenceDialogWindowText}" /> 
      <h:panelGroup rendered="#{Test.hasSelectItem }" 
       style="display:block;width:300px;height:360px;overflow:auto;" styleClass="panelGroup" 
       id="prefPanelGroup"> 
       <h:selectManyCheckbox value="#{Test.selectedItems}" layout="pageDirection"> 
        <f:selectItems value="#{Test.selectItems}" /> 
       </h:selectManyCheckbox> 
      </h:panelGroup> 
      <hx:panelBox styleClass="information_box" id="noCommandWindow" layout="lineDirection" 
       rendered="#{!Test.hasSelectItem }"> 
       <h:outputText styleClass="outputText" id="cmdInfo" value="#{nls.noCommands}" /> 
      </hx:panelBox> 
      <hx:panelBox id="buttonBox1" styleClass="panelStartBox" layout="lineDirection"> 
       <hx:commandExButton id="submitPref" styleClass="commandExButton" type="submit" 
        value="#{nls.submit}" action="#{Test.action}"> 
        <hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" 
         id="behaviorSubmitPref" /> 
       </hx:commandExButton> 
       <hx:commandExButton id="CancelPref" styleClass="commandExButton" type="submit" 
        value="#{nls.cancel}" action="Test"> 
        <hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" 
         id="behaviorCancelPref" /> 
       </hx:commandExButton> 
      </hx:panelBox> 
     </hx:panelDialog> 
    </h:form> 
</td> 

code dans Bean:

public class Test{ 
    private List<String> selectedItems; 
    private List<SelectItem> selectItems; 

    public List<SelectItem> getSelectItems() { 
     // populate the selectItem here... 
    }  
} 

Répondre

1

Stocker le List<SelectItem> selectItems dans une session distincte scope haricot (en supposant que votre celui-ci est la demande actuelle scope), remplissez-le pendant sa construction et ajoutez une méthode comme reload() que vous appelez seulement après en traitant l'élément sélectionné dans la méthode d'action. Vous pouvez accéder au bean tronqué de la session à l'intérieur de la demande portée par @ManagedProperty.

+0

Salut BalusC, Merci pour votre réponse. Mon bean actuel est limité à la session. J'ai essayé de lier la méthode action et la méthode actionListener à selectItems et après que la boîte de dialogue du panneau a affiché le dernier élément de sélection de case à cocher. Mais le bouton n'appelle pas du tout la méthode du bean, et je suis bloqué ici. Y a-t-il une alternative? –

+0

"remplissez-le pendant sa construction et ajoutez une méthode comme reload()" - donc quel composant dois-je lier cette méthode? Devrais-je ajouter un autre bouton et attacher ce bouton d'actualisation? mais dans ce cas, il rafraîchira toute la page, ce que je veux éviter.Je suis nouveau à JSF alors s'il vous plaît supporter mes connaissances limitées si je ne comprenais rien d'évident ici. –