CASE:表单包含输入部门名称的输入文本(不能为空或空白),下拉列表用于选择父部门(可以为空),输入数据时,按清除,清除方法backing bean按预期正常工作,但是当没有输入数据并按下clear时,名称上的bean验证非空白并且出现验证消息,我想在清除时禁用验证。
查看代码:
部门名称:
<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>
Bean验证:
@NotBlank(message = "{name.required}")
@Size(max = 25, message = "{long.value}")
@Column(name = "name", length = 25, nullable = false)
private String name;
Backing Bean方法:
public void clear() {
setDepartmentObj(new Department());
setSelectedParentDepartment(0);
}
答案 0 :(得分:6)
您可以让它刷新整个视图:
<h:commandLink value="Clear" action="#{bean.clear}" immediate="true" />
与
public String clear() {
return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
}
immediate="true"
将跳过没有immediate="true"
的所有输入组件的处理(和验证)。
或者,重新加载页面的JavaScript也应该这样做:
<h:commandLink value="Clear" onclick="window.location.reload(); return false;" />
更新,然后只使用ajax:
<h:commandLink value="Clear" action="#{bean.clear}">
<f:ajax execute="@this" render="@form" />
</h:commandLink>
与
public void clear() {
field1 = null;
field2 = null;
// ...
}
由于execute
设置为@this
(顺便说一下,它已经是默认值,因此您可以省略它),因此它不会处理整个表单。
答案 1 :(得分:0)
某些组件有valueChangeListener
。尝试使用那个。但是我不确定是否会触发验证。