Jsf 2 在清除/重置表单时禁用bean验证
案例:表单包含用于输入部门名称的输入文本(不能为null或空白),以及用于选择上级部门的下拉列表(可以为null),输入数据并按clear时,backing bean中的clear方法可以正常工作,但当不输入数据并按clear时,名称上的非空bean验证有效并显示验证消息,我想在清除时禁用验证Jsf 2 在清除/重置表单时禁用bean验证,jsf-2,bean-validation,Jsf 2,Bean Validation,案例:表单包含用于输入部门名称的输入文本(不能为null或空白),以及用于选择上级部门的下拉列表(可以为null),输入数据并按clear时,backing bean中的clear方法可以正常工作,但当不输入数据并按clear时,名称上的非空bean验证有效并显示验证消息,我想在清除时禁用验证 <h:outputLabel>Parent Department:</h:outputLabel> <ice:selectOneMenu id="parentDepa
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
部门名称:
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
上级部门:
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
@NotBlank(message=“{name.required}”)
@大小(最大值=25,消息=“{long.value}”)
@列(name=“name”,长度=25,可空=false)
私有字符串名称代码>
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
public void clear(){
setDepartmentObj(新部门());
设置选定的父部门(0);
}
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
某些组件有一个
valueChangeListener
。试着用那个。但是,我不确定这是否也会触发验证。您可以让它刷新整个视图:
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
<h:commandLink value="Clear" action="#{bean.clear}" immediate="true" />
immediate=“true”
将跳过所有没有immediate=“true”
的输入组件的处理(和验证)
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
或者,重新加载页面的一段JavaScript也应执行以下操作:
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>
<h:commandLink value="Clear" onclick="window.location.reload(); return false;" />
因为
execute
设置为@this
(顺便说一句,这已经是默认值了,所以您可以忽略它),它不会处理整个表单。如果我不想重新加载整个页面,因为我忘了提到页面包含一些树组件,那么通过重新加载整个页面,它们也会被重新加载,这在清除表单时没有意义,我只想重新加载表单,你明白我的意思吗?还有一种情况,在验证空名称后尝试清除时,它不会清除表单,尽管它进入了clear方法。
<h:outputLabel>Parent Department:</h:outputLabel>
<ice:selectOneMenu id="parentDepartment" value="#{department.selectedParentDepartment}">
<f:selectItem/>
<f:selectItems value="#{departmentBean.departmentList}" var="dept"
itemLabel="#{dept.name}" itemValue="#{dept.id}" />
</ice:selectOneMenu>
<h:message for="parentDepartment" style="color:red" />
<ice:panelGroup>
<h:commandLink value="Add New" action="#{departmentBean.addOrUpdateDepartment}" />
<h:commandLink value="Add New" actionListener="#{departmentBean.clear}" />
</ice:panelGroup>