我有以下JSF 2代码:
<p:selectOneMenu id="dropdown" value="#{data.selection}" required="true" converter="selectOneMenuConverter">
<f:selectItem itemLabel="Select one..." itemValue="" noSelectionOption="true" />
<f:selectItems value="#{data.entries}" var="entry" itemLabel="#{entry.name}" itemValue="#{entry}" />
<p:ajax update="display" event="change" />
</p:selectOneMenu>
<h:panelGroup id="display">
<h:outputText value="#{data.selection}" />
</h:panelGroup>
当我从下拉列表中选择一个值时,一切都按预期工作 . 当用户通过选择“选择一个”来“取消选择”一个条目时,JSF会抱怨这是不可能的,因为需要selectonemenu .
问题来自那里p:ajax进行部分提交以触发验证 . Immediate = true也不起作用,因为如果在输入字段上立即发生(如selectonemenu),则执行验证 . 只有当用户按下页面底部的“继续”按钮(代码中未显示)时才会进行验证
此外,给定的转换器将字符串转换为对象,对于默认值,它返回null(这也是域内“无选择”的预期值) .
所以我的问题是我必须做些什么才能完成我的案子 . 对我而言,这是一个标准案例,我无法想象没有解决方案 .
有任何想法吗?
最好的问候,弗洛里安
1 回答
然后告诉下拉列表的
required
属性,而不是硬编码true
.当表单提交实际上由具有客户端ID
form:go
的提交按钮进行时,#{not empty param['form:go']}
将仅评估true
. 如果您不喜欢硬编码客户端ID,请按如下方式引用它: