2013-02-12 39 views
5

Tôi đang thử nghiệm thành phần "SelectOneMenu" trên trang jsf. Tôi đang populating thành phần này dinamically mặc dù ManageBean của tôi (mà sẽ nhận được tất cả các động vật từ cơ sở dữ liệu).Nhận giá trị được chọn của một SelectOneMenu

Tôi muốn biết nếu có thể thấy mục người dùng đã chọn của "SelectOneMenu" đó (combobox), tôi đang thử với giá trị = "# {animalsManage.animalSelect}" nhưng nó chỉ được gọi ngay từ đầu của trang. Ngoài ra, tôi đang sử dụng một inputText để xem giá trị của intem được chọn của "SelectOneMenu".

Tôi đang làm gì sai?

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

bạn chỉ có thể thêm f: ajax bên trong với sự kiện là "thay đổi" và cũng cung cấp thuộc tính kết xuất có giá trị "@form". Điều này có thể hiển thị giá trị đã chọn của bạn trong hộp văn bản. Một cái gì đó như thế này ** **. Hãy thử đi. –

+0

'# {fileManage.fileName}' là gì? Nhân tiện, một '' hiển thị một trình đơn thả xuống, không phải là một combobox. Nhận các điều khoản của bạn thẳng. Cuối cùng nhưng không kém phần quan trọng, thực hiện logic nghiệp vụ trong một getter là Bad. Đối với một số gợi ý về cách sử dụng '' đúng cách, kiểm tra trang wiki của nó (đặt con chuột lên trên thẻ '[selectonemenu]' mà bạn đặt vào câu hỏi cho đến khi hộp đen xuất hiện rồi nhấn vào đó liên kết * thông tin *). – BalusC

+0

Cảm ơn hemanth nó đã giúp. Ngoài ra, cảm ơn BalusC Tôi đã chỉnh sửa văn bản hy vọng nó là tốt ngay bây giờ. – iGoDa

Trả lời

12

Có rất nhiều giải pháp cho vấn đề được trình bày. Tôi trình bày ở đây hai ý tưởng cơ bản.

  1. Giải pháp phía máy chủ. Đơn giản chỉ cần đính kèm <f:ajax> thẻ bên <h:selectOneMenu> của bạn để cập nhật giá trị được chọn và sự lựa chọn rerender của người dùng, như trong

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

    Nếu bạn thích, bạn cũng có thể làm một số logic tuỳ chỉnh với yếu tố được lựa chọn trong nghe ajax bằng cách xác định listener="#{animalsManage.performCustomAjaxLogic}" của <f:ajax> thẻ.

  2. Giải pháp phía máy khách. Chỉ cần cập nhật phần tử với id = "textbox" trên sự kiện thay đổi cơ bản. Vì vậy, nếu bạn sử dụng jQuery, giải pháp sẽ là

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

    Giả sử giải pháp phía máy khách sẽ chỉ ràng buộc giá trị văn bản của thành phần đầu vào của bạn.

+0

Cảm ơn nó đã hoạt động! Tôi thích sử dụng người nghe với ajax để có được những gì tôi muốn. Ngoài ra, tôi đã có một vấn đề với mojarra không được xác định những gì làm cho máy chủ dừng lại và không thể chạy mã của tôi. – iGoDa

+0

Vui vì nó đã giúp bạn. – skuntsel

+0

Nhân tiện, bạn có thể chấp nhận câu trả lời mà bạn thấy hữu ích nhất. – skuntsel

Các vấn đề liên quan