2013-02-12 20 views
5

Sto testando il componente "SelectOneMenu" su una pagina jsf. Sto popolando dinamicamente questo componente anche se il mio ManageBean (che otterrà tutti gli animali dal database).Ottenere il valore selezionato di un SelectOneMenu

Mi piacerebbe sapere se è possibile vedere l'elemento selezionato dall'utente di "SelectOneMenu" (combobox), sto provando con value = "# {animalsManage.animalSelect}" ma viene chiamato solo all'inizio della pagina. Inoltre, sto usando un inputText per vedere il valore dell'elemento selezionato di "SelectOneMenu".

Cosa sto facendo male?

JSF:

<body> 
    <ui:component> 
     <h:form> 
        <h:outputText value="Select one Mets File" /> 
        <h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}"> 
         <f:selectItem itemLabel="Select..." noSelectionOption="true"/> 
         <f:selectItems value="#{animalsManage.allAnimals}" /> 
        </h:selectOneMenu> 
        <h:inputText id="textbox" value="#{animalsManage.animalSelected }" /> 
     </h:form> 
    </ui:component> 
</body> 

ManageBean:

@ManagedBean 
    @ViewScoped 
    public class AnimalsManage implements Serializable { 

    @EJB 
    private AnimalsFacadeREST animalsFacadeREST; 
    private String animalSelected; 
    private List< SelectItem> selectAnimals; 

    public List<SelectItem> getAllAnimals() { 
      List<Animals> al = animalsFacadeREST.findAll(); 
      selectAnimals = new ArrayList< SelectItem>(); 
      int i = 0; 
      for (Animals animal: al) { 
       selectAnimals.add(new SelectItem(i, animal.getName())); 
       i++; 
      } 
      return selectAnimals; 
    } 

    public String getAnimalSelected() { 
     return animalSelected; 
    } 

    public void setAnimalSelected(String animalSelected) { 
     this.animalSelected = animalSelected; 
    } 
} 
+0

si può semplicemente aggiungere un f: ajax all'interno con l'evento come "cambiamento" e anche fornire un attributo di rendering con valore "@form". Questo può mostrare il valore selezionato nella casella di testo. Qualcosa del genere ** **. Prova. –

+0

Che cos'è '# {fileManage.fileName}'? A proposito, un '' esegue il rendering di un menu a discesa, non di una casella combinata. Ottieni le tue condizioni. Ultimo ma non meno importante, l'esecuzione della logica di business in un getter è Bad. Per alcuni suggerimenti su come usare '', controlla la sua pagina wiki (metti il ​​tuo mouse sopra il tag '[selectonemenu]' che hai posto sulla domanda fino a quando non compare una scatola nera e poi fai clic su di essa il collegamento * info *). – BalusC

+0

Grazie Hemanth ha aiutato. Inoltre, grazie BalusC ho modificato il testo spero che ora vada bene. – iGoDa

risposta

12

Ci sono molte soluzioni al problema presentato. Presento qui due idee di base.

  1. Soluzione lato server. Basta collegare <f:ajax> tag all'interno del vostro <h:selectOneMenu> per aggiornare i valori selezionati e la scelta nuovamente sottoposti a rendering dell'utente, come in

    <h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}"> 
        <f:selectItem itemLabel="Select..." noSelectionOption="true"/> 
        <f:selectItems value="#{animalsManage.allAnimals}" /> 
        <f:ajax execute="combo" render="textbox" /> 
    </h:selectOneMenu> 
    <h:inputText id="textbox" value="#{animalsManage.animalSelected }" /> 
    

    Se ti piace, si può anche fare un po 'la logica personalizzata con elemento selezionato nel ascoltatore ajax specificando listener="#{animalsManage.performCustomAjaxLogic}" di <f:ajax> tag.

  2. Soluzione lato client. Basta aggiornare l'elemento con id = "textbox" sull'evento di modifica di base. Quindi, se si utilizza jQuery la soluzione sarà

    $('#combo').change(function() { 
        $('#textbox').val($('#combo').val()); 
    }); 
    

    pensato che la soluzione client-side si legherà solo valore di testo del componente di ingresso.

+0

Grazie ha funzionato! Ho preferito usare l'ascoltatore con ajax per ottenere ciò che volevo. Inoltre, ho avuto un problema con il mojarra non è stato definito ciò che è stato arrestato dal server e non è stato possibile eseguire il mio codice. – iGoDa

+0

Felice che ti abbia aiutato. – skuntsel

+0

A proposito, puoi accettare la risposta che hai trovato più utile. – skuntsel