2009-05-24 41 views
5

Khi sử dụng RichFaces suggestionBox, làm cách nào bạn có thể chuyển nhiều hơn một id hoặc giá trị từ trang với đầu vào văn bản tới suggestionBox bean sao lưu. tức là: để hiển thị danh sách các thành phố được đề xuất trong một tiểu bang được chọn? Đây là phương pháp autoComplete của tôi.Hộp chú thích richfaces chuyển các giá trị bổ sung để sao lưu bean

public List<Suburb> autocomplete(Object suggest) 
{ 
    String pref = (String) suggest; 
    ArrayList<Suburb> result = new ArrayList<Suburb>(); 

    Iterator<Suburb> iterator = getSuburbs().iterator(); 
    while(iterator.hasNext()) 
    { 
     Suburb elem = ((Suburb) iterator.next()); 
     if((elem.getName() != null && elem.getName().toLowerCase().indexOf(pref.toLowerCase()) == 0) || "".equals(pref)) 
     { 
      result.add(elem); 
     } 
    } 
    return result; 
} 

Như bạn có thể thấy có một giá trị truyền từ trang, Object đề nghị, đó là nội dung của h:inputText (trong Facelets m:textFormRow)

<m:textFormRow id="suburb" label="#{msgs.suburbPrompt}" 
    property="#{bean[dto].addressDTO.suburb}" 
    required="true" maxlength="100" size="30" /> 

<rich:suggestionbox height="200" width="200" usingSuggestObjects="true" 
    suggestionAction="#{suburbsMBean.autocomplete}" var="suburb" for="suburb" 
    fetchValue="#{suburb.name}" id="suggestion"> 
    <h:column> 
     <h:outputText value="#{suburb.name}" /> 
    </h:column> 
</rich:suggestionbox> 

Đầu trong trang mà bạn có thể chọn một trạng thái mà tôi muốn sử dụng để xem danh sách các vùng ngoại ô mà hộp gợi ý hiển thị.

+0

Bạn có thể phải được rõ ràng hơn về những gì bạn đang cố gắng làm - ví dụ, đăng một hình thức đơn giản với các điều khiển bạn muốn để sử dụng và đánh vần chuỗi sự kiện khi người dùng nhập dữ liệu. – McDowell

+0

Vì vậy, bạn muốn chọn tiểu bang, thì hộp gợi ý sẽ chỉ đề xuất vùng ngoại ô từ tiểu bang đó? Mã để chọn trạng thái như thế nào? – Mark

Trả lời

0

Bạn đã xem hộp chú thích RichFaces này chưa demo chưa? Có các liên kết trong các ví dụ để xem nguồn.

Chỉnh sửa:

Âm thanh như bạn cần giá trị của trạng thái trong hạt của bạn trước khi người dùng nhập vào hộp đề xuất. Tôi sẽ sử dụng hỗ trợ aFax của RichFaces để chuyển giá trị của trạng thái cho bean vì vậy khi phương thức tự động hoàn thành được gọi là trạng thái mà người dùng đã chọn trên trang để điền một danh sách các vùng ngoại ô.

+0

Tôi đã sử dụng mã từ bản trình diễn richfaces. – Martlark

1

Có sử dụng thẻ <f:parameter trong công việc <rich:suggestionbox không?

+0

mặc dù điều này đã chỉ cho tôi đúng hướng, nó không phải là một câu trả lời. Nó chứa thông tin hữu ích, mặc dù – PMorganCA

3

(Disclaimer: Tôi biết rằng câu hỏi được hỏi thời gian khá dài trước đây, nhưng có lẽ điều này sẽ giúp một người có vấn đề tương tự ...)

Kiểm tra bài viết trên blog này mà giao dịch với một cái gì đó tương tự : RichFaces - SuggestionBox and hidden field.

Điều quan trọng là sử dụng <f:setPropertyActionListener value="#{...}" target="#{...}"> được bọc bên trong <a4j:support event="onselect" ajaxSingle="true">. Điều này có thể được sử dụng để đặt giá trị bổ sung cho bean sao lưu khi onselect được kích hoạt cho Hộp đề xuất.

Với phương pháp này, tôi cố gắng tạo ra một SuggestionBox hiển thị (và tự động hoàn thành) của khách hàng tên nhưng khi lựa chọn thiết lập một đối tượng toàn khách hàng (với một số tài sản; xác định bởi một id) cho một bean.

+0

Đây là một câu trả lời SO khác về cơ bản cùng một vấn đề: http://stackoverflow.com/questions/1681559/richfaces-suggestionbox/1687031#1687031 – Jonik

0

Bạn có thể sử dụng tab <f:parameter bên trong rich:suggestionbox. Nhiệm vụ của tôi là lọc danh sách theo một số thuộc tính của phần tử danh sách, nơi đôi khi thuộc tính đó có thể bị bỏ qua. Giống như, đôi khi tôi muốn một danh sách chỉ có trái cây họ cam quýt, và đôi khi tôi muốn toàn bộ danh sách trái cây có sẵn.

Trong trang:

<rich:suggestionbox usingSuggestObjects="true" 
     suggestionAction="#{listBuilder.autocompleteFilterFruit('')}" var="ind" 
     for="fruitInput" fetchValue="#{fruit.name}" id="suggestion" > 
    <f:param name="constrainInd" value="#{basket.isConstrainedToCitrus}" /> 

    ... 

</rich:suggestionbox> 

Tôi có một lớp (Basket) mà biết nếu danh sách phải được đặc biệt lọc, và một lớp (ListBuilder) mà xây dựng danh sách.

Trong Basket:

public Boolean getIsConstrainedToCitrus() 
{ 
    return new Boolean (logic that answers "is this basket for citrus only"); 
} 

Trong ListBuilder:

public List<Fruit> autocompleteFilterFruit (Object arg) 
{ 
    List<Fruit> rtnList = new ArrayList<Fruit>(); 

    String suggestion = (String) arg; 

    // get the filter control that the page retrieved from the Basket 
    // 
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
    boolean isConstrainedToCitrus = "true".equals (params.get ("constrainInd")); 

    // allFruit is a pre-initialized list of all the available fruit. use it to populate the return list according 
    // to the filter rules and matches to the auto-complete suggestions 
    for (Fruit item : allFruit) 
    { 
     if ((!isConstrainedToCitrus || item.isCitrus()) && item.name.startsWith(suggestion)) 
     { 
      rtnList.add (item); 
     } 
    } 
    return rtnList; 
} 
Các vấn đề liên quan