我正在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);
}
输出:
项目
提前致谢
答案 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>