2013-02-12 5 views
5

Я тестирую компонент «SelectOneMenu» на странице jsf. Я заполняю этот компонент динамически, хотя мой ManageBean (который получит всех животных из базы данных).Получение выбранного значения SelectOneMenu

Я хотел бы знать, если можно увидеть выбранный пользователем элемент этого «SelectOneMenu» (combobox), я пытаюсь со значением = «# {animalsManage.animalSelect}», но он вызывается только в начале страницы. Кроме того, я использую inputText, чтобы увидеть значение выбранного набора «SelectOneMenu».

Что я делаю неправильно?

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

Вы можете просто добавить f: ajax внутри с событием как «изменить», а также предоставить атрибут render со значением «@form». Это может показать выбранное значение в текстовом поле. Что-то вроде этого ** **. Попробуй. –

+0

Что такое '# {fileManage.fileName}'? Кстати, '" отображает выпадающий список, а не поле со списком. Получите ваши условия прямо. И последнее, но не менее важное: выполнение бизнес-логики в getter - это плохо. Для некоторых советов о том, как правильно использовать '', проверьте его страницу wiki (поместите мышь поверх тега '[selectonemenu]', который вы разместили на вопросе, пока не появится черный ящик, а затем нажмите на него ссылка * info *). – BalusC

+0

Спасибо, спасибо, это помогло. Кроме того, спасибо BalusC, я отредактировал текст, надеюсь, теперь все в порядке. – iGoDa

ответ

12

Есть много решений представленной проблемы. Я представляю здесь две основные идеи.

  1. Решение на стороне сервера. Просто прикрепите <f:ajax> тег внутри <h:selectOneMenu> обновить выбранные значения и выбор засавить пользователя, как в

    <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 }" /> 
    

    Если вы хотите, вы можете также сделать некоторые пользовательскую логику с выбранным элементом в АЯКС слушателем, указав listener="#{animalsManage.performCustomAjaxLogic}" из <f:ajax> тега.

  2. Клиент-решение. Просто обновите элемент с id = "textbox" в основном событии изменения. Таким образом, если вы используете JQuery решения будет

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

    Мысли на стороне клиента решение будет связывать только текстовое значение вашего входного компонента.

+0

Спасибо, сработало! Я предпочитал использовать слушателя с ajax, чтобы получить то, что я хотел. Кроме того, у меня была проблема с моджаррой, которая не была определена, что было сделано на сервере, чтобы остановить и не смог запустить мой код. – iGoDa

+0

Рад, что это вам помогло. – skuntsel

+0

Кстати, вы можете принять ответ, который вы нашли наиболее полезным. – skuntsel

Смежные вопросы