求助:PrimeFaces selectOneMenu无法重复选同一选项,二次选值为null
嗨,这个问题我之前做项目的时候也踩过坑!其实根源是PrimeFaces的默认优化行为——当你选择的选项和当前组件绑定的Bean值完全相同时,组件默认不会触发表单提交(包括AJAX请求),这就导致ManagedBean里接收不到值,甚至会被设为null。
下面给你几个靠谱的解决办法:
给selectOneMenu添加
forceSubmit="true"属性
这个属性会强制组件不管值有没有变化,都把当前选中值提交到后端。直接加到组件上就行:<p:selectOneMenu value="#{yourBean.selectedOption}" forceSubmit="true"> <f:selectItems value="#{yourBean.optionList}" var="opt" itemLabel="#{opt.label}" itemValue="#{opt.value}" /> </p:selectOneMenu>检查ManagedBean的作用域和属性绑定
确保你的Bean用的是合适的作用域,比如@ViewScoped(推荐用于单页面交互场景),如果用@RequestScoped的话,每次请求都会重建Bean,很容易出现值丢失的情况。另外一定要确认selectedOption的getter和setter方法是标准实现,不要在里面加额外的逻辑干扰值的传递。AJAX场景下的额外配置
如果你是用<p:ajax>来处理选择事件,记得把forceSubmit="true"也加到ajax标签上,同时确保事件是change:<p:selectOneMenu value="#{yourBean.selectedOption}"> <f:selectItems value="#{yourBean.optionList}" /> <p:ajax event="change" listener="#{yourBean.onOptionSelect}" forceSubmit="true" /> </p:selectOneMenu>
简单来说,PrimeFaces默认会跳过无变化值的提交来节省资源,但在需要重复触发同一选择的业务场景下,开启forceSubmit就能解决这个问题啦。
内容的提问来源于stack exchange,提问作者Eiten
相关产品推荐
相关产品推荐

