Mah*_*leh 3 bean-validation jsf-2
CASE:表单包含用于输入部门名称的输入文本(不能为空或空白),以及用于选择父部门的下拉列表(可以为空),在输入数据时,按清除,支持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>
Run Code Online (Sandbox Code Playgroud)
Bean验证:
@NotBlank(message = "{name.required}")
@Size(max = 25, message = "{long.value}")
@Column(name = "name", length = 25, nullable = false)
private String name;
支持Bean方法:
public void clear() {
setDepartmentObj(new Department());
setSelectedParentDepartment(0);
}
您可以让它刷新整个视图:
<h:commandLink value="Clear" action="#{bean.clear}" immediate="true" />
Run Code Online (Sandbox Code Playgroud)
同
public String clear() {
return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
}
Run Code Online (Sandbox Code Playgroud)
在immediate="true"将跳过其不具有所有输入分量的处理(和验证)immediate="true".
或者,要重新加载页面的JavaScript也应该:
<h:commandLink value="Clear" onclick="window.location.reload(); return false;" />
Run Code Online (Sandbox Code Playgroud)
根据您想要部分请求的注释进行更新,然后使用ajax:
<h:commandLink value="Clear" action="#{bean.clear}">
<f:ajax execute="@this" render="@form" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
同
public void clear() {
field1 = null;
field2 = null;
// ...
}
Run Code Online (Sandbox Code Playgroud)
因为execute设置为@this(顺便说一下,它已经是默认值,所以你可以省略它),它不会处理整个表单.
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |