gpt4 book ai didi

jsf-2 - 在清除/重置表单的情况下禁用 bean 验证

转载 作者:行者123 更新时间:2023-12-01 11:03:39 25 4
gpt4 key购买 nike

CASE:表单包含输入部门名称的输入文本(不能为空或为空),以及选择上级部门的下拉列表(可以为空),输入数据时,按清除,清除方法在支持 bean 按预期工作正常,但是当不输入数据并按清除时,名称上非空白的 bean 验证有效并出现验证消息,我想在清除时禁用验证。

  1. 查看代码:


    部门名称:

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

  2. Bean 验证:

    @NotBlank(message = "{name.required}")
    @Size(max = 25, message = "{long.value}")
    @Column(name = "name", length = 25, nullable = false)
    私有(private)字符串名称;

  3. 支持 Bean 方法:

    public void clear() {
    setDepartmentObj(新部门());
    setSelectedParentDepartment(0);
    }

最佳答案

您可以让它刷新整个 View :

<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(顺便说一句,这已经是默认值,所以你可以省略它),它不会处理整个形式。

关于jsf-2 - 在清除/重置表单的情况下禁用 bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8277816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com