Jsf 2 JSF2:当需要下拉列表且默认条目为空时,无法在下拉列表元素中选择默认条目
我有以下JSF2代码:Jsf 2 JSF2:当需要下拉列表且默认条目为空时,无法在下拉列表元素中选择默认条目,jsf-2,primefaces,Jsf 2,Primefaces,我有以下JSF2代码: <p:selectOneMenu id="dropdown" value="#{data.selection}" required="true" converter="selectOneMenuConverter"> <f:selectItem itemLabel="Select one..." itemValue="" noSelectionOption="true" /> <f:se
<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>
当我从下拉列表中选择一个值时,一切正常。
当用户通过选择selectone来取消选择条目时,JSF抱怨这是不可能的,因为selectonemenu是必需的
问题在于,p:ajax会进行部分提交,从而触发验证。Immediate=true也不起作用,因为如果在输入字段(如selectonemenu)上发生Immediate,则会执行验证。
只有当用户按下代码中未显示的页面底部的“继续”按钮时,才能进行验证
此外,给定的转换器将字符串转换为对象,对于默认值,它返回null,这也是域中不选择的预期值
所以我的问题是我必须做什么来完成我的案子。
对我来说,这是一个标准案例,我无法想象没有解决方案
有什么想法吗
致以最良好的祝愿,
弗洛里安
只有当用户按下代码中未显示的页面底部的“继续”按钮时,才能进行验证
然后只需告诉下拉列表的required属性就可以做到这一点,而不是硬编码一个true
嗨,又是我。我们遇到了一个非常奇怪的问题。带有param和clientId的内容可以在文本字段上使用,但不能在p:selectOneMenu上使用。我们到处都有必需的=非空参数。。。文本字段和下拉列表中的el。在“移动”按钮上,我们有一个绑定,而在“保存”按钮上,我们没有绑定。现在,当我按下save按钮时,所有selectOneMenus都变为红色,提示验证失败。此外,表达式:{notempty param[go.clientId]}计算结果为false,但jsf抱怨需要一个值。这真的是唯一的方法吗?使用这种方法时,我们遗漏了一件事,那就是自动插入*指向该字段是必需的。@Diego:add或facesContext.currentPhaseId.ordinal eq 6到条件中。我说得太早了。不幸的是,它的评估结果确实是真的,但是jsf让所需的验证通过了。解决方法是添加一个我们自己编写的NullValidator,并混合使用这两种方法。有什么想法吗,@BalusC?
<h:form id="form">
<p:selectOneMenu ... required="#{not empty param['form:go']}">
...
</p:selectOneMenu>
...
<p:commandButton id="go" ... />
</h:form>
<h:form>
<p:selectOneMenu ... required="#{not empty param[go.clientId]}">
...
</p:selectOneMenu>
...
<p:commandButton binding="#{go}" ... />
</h:form>