2013-08-26 129 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"; 
    } 
} 
相关问题