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>
4

2 回答 2

1

我建议您阅读有关 JSF 的书或至少阅读更多有关它的教程。您的代码没有多大意义。您将 a 嵌套selectOneMenu在 a 中commandButton。如果您想显示数据库中的一些值,您还应该在托管 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";
    }
}
于 2013-08-26T13:22:57.503 回答
1

首先,您不能将<h:selectOneMenu>组件嵌套在<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 中的 a 传递给组件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()方法,该方法将返回一个列表,其中包含将填充下拉列表的对象。

WhenT是一个复杂的 Java 对象,例如Item它具有 and 的 String 属性labelvalue那么您可以使用该var属性来获取迭代变量,然后您可以在itemValue和/或itemLabel属性中使用它(如果您省略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.
}

你可以在这里阅读更多:

于 2013-08-26T13:23:43.350 回答