Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 JSF2:当需要下拉列表且默认条目为空时,无法在下拉列表元素中选择默认条目_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 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

我有以下JSF2代码:

    <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>