f:ajax不更新组件

时间:2019-07-15 15:47:19

标签: jsf primefaces selectonemenu

我有一个选择,我希望当用户不选择任何内容时会显示错误。所以我使用验证器,而我的xhtml代码是:

<p:selectOneMenu id="students"
                        value="#{studentsBean.selectedStudent}"
                        converter="studentsConverter" effect="fold">
                        <f:selectItem itemLabel="Select..." itemValue="" />
                        <f:selectItems value="#{studentsBean.studentsList}"
                            var="student" itemValue="#{student}"
                            itemLabel="#{student.name}" />
                        <p:ajax event="change" update="students"  process="@this" />
                        <f:validator validatorId="studentNotNull" />
                        <f:ajax execute="@this" render="studentPanel"/>

                    </p:selectOneMenu>
                    <h:panelGroup id="studentPane">
                        <h:message for="students" style="color:red" />
                    </h:panelGroup>

问题是,如果我不选择任何内容,它会在我选择一个学生时显示“未选中学生”,而该标签不会消失。

验证器有效,我认为我不必编写代码。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试

<p:selectOneMenu id="students"
   value="#{studentsBean.selectedStudent}"
   converter="studentsConverter" effect="fold"
   required="true" requiredMessage="Student is required">
   <f:selectItem itemLabel="Select..." noSelectionOption="true"/>
   <f:selectItems value="#{studentsBean.studentsList}"
       var="student" 
       itemValue="#{student}"
       itemLabel="#{student.name}" />
</p:selectOneMenu>

添加您的表单

 <p:growl id="msgs" showDetail="true" life="3000"/> 

当然还有更新msgs表单中的提交