我有一个h:inputText,h:selectonemenu和commandbuton。 Inputtext是必填字段,我将其定义为immediate =“true”。然后,当我单击按钮时,我想将selectonemenu的当前值传递给托管bean。但它的passig null。如何管理此验证,以便我可以在托管bean中获取selectOneMenu的值。
我的代码是..
<h:inputText id="inputSome" required="true" requiredMessage="Pls enter something"/>
<h:message for="inputSome"></h:message>
<h:selectOneMenu id="recepients" value="#{controller.selected}" immediate="true">
<f:selectItem itemLabel="Select" itemValue=""/>
<f:selectItems value="#{controller.tempNameList1}"></f:selectItems>
</h:selectOneMenu>
<p:commandButton value="Add" action="#{controller.submit}"
immediate="true"/>
答案 0 :(得分:5)
当你将immediate=true
放在commandButton中时,Invoke Application
阶段直接执行跳过(和包括)验证后的阶段。因此,也会跳过“应用模型值”阶段,并且托管bean的属性保持未初始化状态。这会导致您为selectOneMenu
的值传递null。解决方案是,您必须检索控制器的selected
属性值手动,如下所示:
Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
for (String key : paramMap.keySet()) {
if (key.contains("recepients")) {
selected = Integer.parseInt(paramMap.get(key));
}
}