2009-06-17 68 views
1

我試圖使用JSF在Spring Web Flow中驗證兩種不同的表單。使用Spring Web Flow和JSF在一個頁面上驗證多個表單

問題是,validateAllOnClick似乎觸發頁面上的每個客戶端驗證程序。

設置processIds的形式我想驗證的ID或輸入ID或驗證ID只是導致沒有客戶端驗證器觸發,如果我也刪除驗證ALlOnClick。在提交按鈕上保持validateAllOnClick並設置processIds會導致所有的客戶端驗證器觸發。

如何使用spring web flow和JSF進行多種形式的客戶端驗證?

<ui:define name="content"> 
     <div id="main-content"> 

     <div id="system">  
     <div class="leftcolumn"> 
     <ui:fragment> 
     <h:form id="testForm"> 
      <div class="admin-title">User Management</div> 
      <div class="system-panel"><span class="header">Add a new 
      user</span> 
      <table> 

       <tr> 
        <td><h:outputLabel for="first_names" value="First Name:" /></td> 
        <td><sf:clientTextValidator required="true" 
         invalidMessage="Please enter user\'s first name " id="requiredFirstName"> 
         <h:inputText id="first_names" required="true" /> 
        </sf:clientTextValidator></td> 
       </tr> 
       <tr> 
        <td><h:outputLabel for="last_name" value="Last Name:" /></td> 
        <td><sf:clientTextValidator required="true" 
         invalidMessage="Please enter user\'s last name " id="requiredLastName"> 
         <h:inputText id="last_name" required="true" /> 
        </sf:clientTextValidator></td> 
       </tr> 
       <tr> 
        <td><h:outputLabel for="email" value="Email:" /></td> 
        <td><sf:clientTextValidator required="true" 
         invalidMessage="Please enter user\'s e-mail address" id="requiredEmail"> 
         <h:inputText id="email" required="true" /> 
        </sf:clientTextValidator></td> 

       </tr> 
       <tr> 
        <td>Set password to last name:<br /> 
        (in lower case)</td> 

        <td><h:selectBooleanCheckbox id="init_password" value="true" /> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="2" align="right"> 
        <div id="password" class='hide_password'><h:outputLabel 
         for="password" value="Password:" /> <h:inputText id="password" /> 

        </div> 
        </td> 
       </tr> 
      </table> 
      <sf:validateAllOnClick> 
       <sf:commandButton id="addNewUserAction" action="addUser" 
        value="Add New User" processIds="requiredEmail, requiredLastName, requiredFirstName, email" /> 
        </sf:validateAllOnClick> 
    </div> 

     </h:form> </ui:fragment> 

     <ui:fragment> 
      <h:form id="akeemForm"> 
       <div class="system-panel"><span class="header">Reset 
       User's Password</span> 
       <table> 
        <tr> 
         <td><h:outputLabel for="resetPasswordEmail" value="Email:" /></td> 
         <td><sf:clientTextValidator required="true" 
          invalidMessage="Please enter user\'s e-mail address" id="requiredEmail1" > 
          <h:inputText id="resetPasswordEmail" /> 
         </sf:clientTextValidator></td> 
        </tr> 
        <tr> 
         <td><h:outputLabel for="resetPasswordPassword" 
          value="Password:" /></td> 
         <td><sf:clientTextValidator required="true" 
          invalidMessage="Please enter user\'s new password" id="requiredEmail2" > 
          <h:inputText id="resetPasswordPassword" /> 
         </sf:clientTextValidator></td> 
        </tr> 
        <tr> 
         <td><h:outputLabel for="resetPasswordNotify" 
          value="Email User Their New Password:" /></td> 
         <td><h:selectBooleanCheckbox id="resetPasswordNotify" 
          value="true" /></td> 
        </tr> 
       </table> 

        <sf:commandButton id="changeUserPasswordAction" 
         processIds="*" action="changeUserPassword" 
         value="Reset Password" /> 
     </div> 
      </h:form> 
     </ui:fragment> <h:form> 
      <div class="system-panel"><span class="header">Manage 
      User Profile</span> 
      <table width="100%"> 
       <tr> 

        <td><h:outputLabel value="Search" /></td> 
        <td><h:inputText /></td> 
       </tr> 
      </table> 
      <h:commandButton action="searchUser" value="Search" /></div> 
     </h:form></div> 
     <div class="rightcolumn"> 
     <div class="admin-title">Title Management</div> 

     <h:form> 
      <div class="system-panel"><span class="header">Add A 
      Title</span> <br /> 
      <br /> 
      <h:commandButton id="addTitle" 
       value='Start Process for Adding a Title' action="addTitle" /></div> 

     </h:form> 


     <div class="system-panel"><span class="header">Edit A 
     Title</span> <!--<h:form>--> 
     <table width="100%"> 
      <tr> 
       <td class='td_name'>Book title:</td> 
       <td><h:form> 
        <h:selectOneMenu id="currentSelectedBook" 
         value="#{bookSelector.selectedBook}"> 
         <f:selectItems value="#{bookSelector.options}" /> 
        </h:selectOneMenu> 

        <h:commandButton id="cmdButton" value="Go to book Dashboard" 
         action="updateBook" /> 

       </h:form></td> 
      </tr> 
     </table> 
     <!--  <h:commandButton value="Go to the Edit Title interface" action="updateBook" /> 
    </h:form> --></div> 

     <h:form 
      onsubmit="return confirm('Are you sure you want to delete this book?')"> 

      <div class="system-panel"><span class="header">Delete A 
      Title</span> 
      <table width="100%"> 
       <tr> 
        <td class='td_name'>Book title:</td> 
        <td>Book Select Here</td> 
       </tr> 
      </table> 
      <h:commandButton value="Delete" action="deleteTitle" /></div> 

     </h:form> <br /> 

     <div class="system-panel"><span class="header">Title 
     Reports</span> 
     <ul> 
      <li>Titles without ISBNs or Billing Divisions - <h:form> 
       <h:commandLink value="View Report" action="missingBillingIsbn" /> 
      </h:form></li> 
     </ul> 
     </div> 


     </div> 
     </div> 


     <div class="clearer"></div> 



     </div> 
    </ui:define> 
</ui:composition> 

回答

0

可以通過使所有這些形式爲T做一個簡單的重構:子窗體(T標籤是指Tomahawk庫與JSF效果很好),然後附上所有這些子窗體中

完成之後,可以使用t:commandbutton調用選擇子窗體。

這種說法可以幫助您提交多份表格,(有選擇地)使用一個按鈕。看看下面的文檔。 http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_subform.html

此外,在JSF中,有證實別忘組件使用該電源線=「真正的」屬性,否則驗證是不是真的拉開序幕。

我希望有幫助。

+0

這是我找到的最佳答案。我們會看看它是否有效,謝謝! – 2009-09-30 13:57:41

相關問題