2014-06-11 34 views
0

我編碼JSF應用程序,其在它的上部包括具有字段和在它的下部的形式,在每個項目刪除按鈕一個數據表:驗證約束阻斷的ActionListener

  <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][email protected][a-zA-Z0-9]+\\.[a-zA-Z0-9]+", message = "Email format is invalid.") 
private String email; 
} 

現在,當我打我的頁面上刪除按鈕 - 與文本字段空白字符約束驗證踢,預防的ActionListener執行。有沒有辦法解決這個問題? 非常感謝!

回答

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> 

無關的具體問題,我建議使用命令按鈕屬性action,而不是actionListener。見Differences between action and actionListener

+0

謝謝!它完美的作品! – user2824073