jsf select 一个菜单得到 selected 项

jsf select one menu get the selected item

我正在 jsf 上做一个项目,我正在使用一个 select 菜单,允许用户选择一个项目,然后他们按提交。单击按钮时,jsf 调用 bean,它应该接收值 selected,但我总是得到一个空结果。我看到了其他人 post,我想我和其他人的答案很接近,我想这只是遗漏了一个小细节

这是我的代码:

        <h:selectOneMenu id="sel1" value="#{foo.bankName}">
            <f:selectItems value="#{foo.bankNameMap}" />
        </h:selectOneMenu>

<h:commandButton id="validate" value="Submit"
                            action="#{foo.submit}"/>

现在在 bean 上:

 public String getBankName() {
            return bankName;
        }

    public void setBankName(String bankName) {
        this.bankName = bankName;
    }

    private static Map<String,Object> bankNameMap;

    public Map<String,Object> getBankNameMap() {
        return bankNameMap;
    }

    @PostConstruct
    public void init() {
            initiateDropDown();
     } 

     public void  initiateDropDown() {
            bankNameMap = new LinkedHashMap<String,Object>();
             bankNameMap.put("aaaa" , "aaaa");
     }

    public void submit(){ //method called when clicked on the button
          System.out.println("item " +bankName);
    }

输出:

项目

提前致谢

您创建了一个方法 initiateDropDown(); 来填充地图,但您从未调用过它。我想你不能 select aaaa 来自 <h:selectOneMenu/> 组件,因为它不存在于地图中。你的地图是空的。此外,您的 submit() 方法中缺少 return 类型。您需要设置 return 类型的方法来传递编译时间。例如 public void submit();.

使现有代码正常工作的最简单方法应该是:

public Map<String, Object> getBankNameMap() {
    initiateDropDown();
    return bankNameMap;
}

public void submit() { // method called when clicked on the button
    System.out.println("item " + bankName);
}

JSF 看起来不错。只需确保您的元素在 <h:form>.

<h:body>
    <h:form id="myForm">
        <h:selectOneMenu id="sel1" value="#{foo.bankName}">
            <f:selectItems value="#{foo.bankNameMap}" />
        </h:selectOneMenu>
        <h:commandButton id="validate" value="Submit" action="#{foo.submit}"/>
    </h:form>
<h:body>