Nas*_*o47 4 ajax jsf selectonemenu required primefaces
这是我的配置:
一些代码(我只发布了相关部分以便更清晰):
<p:selectOneMenu value="#{viewModel.selectedContact}" required="true" converter="omnifaces.SelectItemsConverter">
<p:ajax event="change" listener="#{viewModel.updateContact}" update="area"/>
<f:selectItem itemValue="#{null}" itemLabel="#{msg.no_contact}" noSelectionOption="true" />
<f:selectItems value="#{viewModel.contacts}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
所以在这里,我们有一个简单的p:selectOneMenu包含Contact对象列表以及"无联系"选项.如果我想提交表单,则需要此字段.
在列表中选择联系人时,将updateContact调用该方法.此方法将生成将area在AJAX调用更新的页面部分中显示的数据.
如果我选择"无联系"选项,则会触发验证错误,因为此字段是必需的,因此updateContact不会调用该方法.我希望调用该方法,因为我需要重置一些数据然后隐藏area页面的部分.
我尝试过使用process="@this",immediate="true"但它不起作用.使用时immediate="true",选中Contact的不会传递给updateContact方法.
那么,在选择空值时绕过该字段验证的最佳方法是什么?
让required属性检查是否调用了命令按钮.您可以通过请求参数映射中存在按钮的客户端ID来检查.
<p:selectOneMenu ... required="#{not empty param[save.clientId]}" />
...
<p:commandButton binding="#{save}" ... />
Run Code Online (Sandbox Code Playgroud)
(注意:代码是原样,你不需要bean属性)
如果未调用命令按钮(而是调用ajax更改侦听器),则required属性将进行评估false,一切都将按照您的意图进行.
更新:根据评论,您打算在渲染响应期间始终显示它们.所以,只需添加该检查:
<p:selectOneMenu ... required="#{not empty param[save.clientId] or facesContext.currentPhaseId.ordinal eq 6}" />
...
<p:commandButton binding="#{save}" ... />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |