【问题标题】:Validation Constraint blocking actionListener验证约束阻塞 actionListener
【发布时间】:2014-06-11 09:48:44
【问题描述】:

我正在编写一个 JSF 应用程序,它的上半部分包含一个带有字段的表单,下半部分包含一个数据表,每个项目上都有一个删除按钮:

            <h:panelGrid columns="2" styleClass="default">

                <h:outputLabel for="name" value="Name: " />



                <h:inputText id="name" value="#{user.name}" />

                <h:outputLabel for="name" value="Surname: " />
                <h:inputText id="surname" value="#{user.surname}" />

                <h:outputLabel for="name" value="Email: " />
                <h:inputText id="email" value="#{user.email}" />



                <h:commandButton actionListener="#{manager.save}"
                    styleClass="buttons" value="Save" />
                <h:messages errorStyle="color: red" infoStyle="color: green"  />
                <br/>
                <ui:debug/>
            </h:panelGrid>

           <br/>
            <h:dataTable value="#{userList}" var="item" styleClass="table"
                headerClass="table-header"
                rowClasses="table-odd-row,table-even-row">
                <h:column>
                    <f:facet name="header">Name</f:facet>
                    <h:outputText value="#{item.name}" />
                </h:column>
                <h:column>
                    <f:facet name="header">Surname</f:facet>
                    <h:outputText value="#{item.surname}" />
                </h:column>

                <h:column>
                    <f:facet name="header">Email</f:facet>
                    <h:outputText value="#{item.email}" />
                </h:column>
                <h:column>
                    <f:facet name="header">Delete</f:facet>
                    <h:commandButton actionListener="#{manager.delete(item)}"
                        styleClass="buttons" value="Delete" />
                </h:column>

            </h:dataTable>

        </h:form>

在我对用户 Bean 应用约束之前,该应用程序一直有效:

public class User  {

@Size(min = 5, max = 20, message = "Please enter a valid name (5-20 characters)")
private String name;
@Size(min = 5, max = 20, message = "Please enter a valid surname (5-20 characters)")
private String surname;
@Size(min = 5, message = "Mail size is at least 5 characters")
@Pattern(regexp = "[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+", message = "Email format is invalid.")
private String email;
}

现在,当我点击页面上的 Delete 按钮时 - 文本字段为空白 - 约束验证器启动,阻止 actionListener 执行。有没有办法解决这个问题? 非常感谢!

【问题讨论】:

    标签: jsf jakarta-ee jsf-2


    【解决方案1】:

    由于您没有使用 ajax,因此提交了整个表单并自动触发验证器。

    为了防止这种情况,您可以使用 ajax,以便仅提交您要提交的表单部分,或者使用两种不同的表单。

    使用 ajax,您可以执行以下操作:

    <h:dataTable id="dataTable" ...>
        ...
        <h:commandButton actionListener="#{manager.delete(item)}"
                        styleClass="buttons" value="Delete" >
            <f:ajax execute="dataTable" render="dataTable" />
        </h:commandButton>
    </h:dataTable>
    

    与具体问题无关,我建议在commandButton中使用action属性而不是actionListener。见Differences between action and actionListener

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      相关资源
      最近更新 更多