2013-08-26 184 views
0

您好我正在創建一個JSF應用程序。事實上,我做了一個下拉列表,並希望根據從下拉列表中選擇的值顯示結果。如果有人可以幫助....感謝基於下拉菜單選擇從數據庫顯示值

這裏是我的下拉

<h:form> 
       <h:commandButton action="sample?faces-redirect=true" value="submit"> 
        <h:selectOneMenu id="sampleSearch" value="#{cBean.id}"> 
        <f:selectItem id="id" itemLable="idText" itemValue="By Text" /> 
        <f:selectItem id="idnumeric" itemLable="idNumeric" itemValue="Number" /> 
        <f:selectItem id="product" itemLable="Product" itemValue="Main Product" /> 
        <f:selectItem id="lonumber" itemLable="loNumber" itemValue="LoNumber" /> 
        <f:selectItem id="formula" itemLable="formula" itemValue="By Formula" /> 
        </h:selectOneMenu> 
       </h:commandButton> 

      </h:form> 

回答

1

首先,你不能巢<h:selectOneMenu>份(S)內<h:commandButton> ! 這裏是你的<h:form>

<h:form> 
    <h:commandButton action="sample?faces-redirect=true" value="submit" /> 
     <h:selectOneMenu id="sampleSearch" value="#{cBean.id}"> 
      <f:selectItem id="id" itemLable="idText" itemValue="By Text" /> 
      <f:selectItem id="idnumeric" itemLable="idNumeric" itemValue="Number" /> 
      <f:selectItem id="product" itemLable="Product" itemValue="Main Product" /> 
      <f:selectItem id="lonumber" itemLable="loNumber" itemValue="LoNumber" /> 
      <f:selectItem id="formula" itemLable="formula" itemValue="By Formula" /> 
    </h:selectOneMenu> 
</h:form> 

適當的結構,那麼,爲了得到從數據庫下拉列表選項,您可以考慮使用<f:selectItems>組件(和擺脫那些<f:selectItem> S的),並通過從List<T>託管bean的組件value屬性。然後

selectOneMenu應該是這樣的:

<h:selectOneMenu value="#{cBean.id}"> 
    <f:selectItems value="#{cBean.values}" 
        var="item" 
        itemLabel="#{item.label}" 
        itemValue="#{item.value}"/> 
</h:selectOneMenu> 

至於管bean,它現在應該提供一個public List<T> getValues()方法,該方法將返回一個列表與將填充下拉列表中的對象。

T是一個複雜的Java對象,如Item其中有labelvalue一個String屬性,那麼你可以使用var屬性來獲取迭代變量的保持,你又可以在itemValue使用和/或itemLabel attribtues(如果您省略itemLabel,則標籤與該值相同)。

比方說:

@ManagedBean 
@RequestScoped 
public class CBean { 
    public List<Item> getValues() { 
     List<Item> result = new ArrayList<Item>(); 
     //..call-back to web-service, db, etc. and populate the result variable. 
     return result; 
    } 
} 

Item類是這樣的:

public class Item { 
    private String label; 
    private String value; 

    //getters, setters. 
} 

你可以在這裏閱讀更多:

+0

你忘了提到,如果他在你的案例中使用了像Item這樣的複雜類型,他還必須編寫一個自定義的'ItemConverter'。 – noone

+0

'Item'有兩個'String'屬性(用作item和label),所以不需要'ItemConverter'。在itemValue屬性包含整個變量的情況下(比如'itemValue =「#{item}'),需要一個'Converter',因爲'Item'對象必須表示爲'String'。 –

1

我建議你閱讀一本關於JSF或至少一些關於它的更多的教程。你的代碼沒有多大意義。您在commandButton的內部嵌套selectOneMenu。如果要顯示數據庫中的某些值,還應該在託管bean中調用一個方法來執行查詢並檢索結果。

這就是你應該怎麼做,而不是:

<h:form> 
    <h:selectOneMenu id="sampleSearch" value="#{cBean.id}"> 
     <f:selectItem id="id" itemLable="idText" itemValue="By Text" /> 
     <f:selectItem id="idnumeric" itemLable="idNumeric" itemValue="Number" /> 
     <f:selectItem id="product" itemLable="Product" itemValue="Main Product" /> 
     <f:selectItem id="lonumber" itemLable="loNumber" itemValue="LoNumber" /> 
     <f:selectItem id="formula" itemLable="formula" itemValue="By Formula" /> 
    </h:selectOneMenu> 
    <h:commandButton action="#{cBean.search}" value="submit" /> 
</h:form> 

而且你的bean是這樣的:

public class CBean { 
    private String id; // getter+setter 

    public String search() { 
     // perform your query based on the id value 

     return "sample?faces-redirect=true"; 
    } 
} 
相關問題