jsf选择一个菜单获取所选项目

时间:2017-07-06 15:04:10

标签: jsp jsf selectonemenu

我正在jsf上做一个项目,我正在使用一个选择菜单,允许用户选择一个项目,然后按提交。单击按钮时,jsf调用bean,它应该接收选定的值,但我总是得到一个空的结果。我看到其他帖子,我想我的其他答案非常接近,我想这只是一个缺少的小细节

这是我的代码:

        <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);
    }

输出:

项目

提前致谢

1 个答案:

答案 0 :(得分:0)

您创建了一个方法initiateDropDown();来填充地图,但您从未调用它。我想您无法从aaaa组件中选择<h:selectOneMenu/>,因为它在地图中不存在。你的地图是空的。此外,submit()方法缺少返回类型。您需要设置方法的返回类型以传递编译时间。例如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>