2012-12-11 45 views
1

我正在使用jsf 2.1 + primefaces 3.4.1。我遇到了阻止驗證禁用組件的問題。primefaces禁用組件驗證

什麼我大約是這樣的:

<h:form id="form"> 
    <p:dataTable id="parentDataTable" value=#{bean.list} var="parentItem"..> 
     <p:column> 
      .. 
      <p:dataTable id="childDataTable" value=#{bean.map[parentItem]}" var="childItem"> 
       <p:column> 
        <f:facet name="header"> 
         some inputText 
        </f:facet> 
        <p:inputText id="inputText" 
         disabled=#{bean.selectedObjectsMap[childItem]} required="true" requiredMessage="value required" /> 
        <p:message for=":form:parentDataTable:childDataTable:inputText" /> 
       </p:column> 
       <p:column> 
        <f:facet name="header"> 
         Select 
        </f:facet> 
        <p:selectBooleanCheckbox id="checkBox" value="#{bean.selectedObjectsMap[childItem]}"> 
         <p:ajax update=":form:parentDataTable:childDataTable:inputText" /> 
        </p:selectBooleanCheckbox> 
       </p:column> 
      </p:dataTable> 
     </p:column> 
    </p:dataTable> 
</h:form> 

的想法是,在默認情況下inputText組件被禁用,當我提交表單的「所需的值」驗證不起作用。當我點擊selectBooleancheckbox組件時,inputText被啓用,並且當我提交表單時,「required value」驗證也起作用。但是,當我禁用inputText時,驗證將繼續進行並顯示「需要值」消息,我無法提交表單。看起來,當我單擊複選框時,服務器端的JSF UI組件樹不能正確更新,但從視覺上我可以看到每次單擊複選框時都會禁用inputText組件。

任何想法如何解決這個問題?

回答

3

如果您的驗證心不是比在此示例代碼中所示更復雜,你的代碼將其打開和關閉使用

<p:inputText id="inputText" disabled="#{bean.selectedObjectsMap[childItem]}" required="#{!bean.selectedObjectsMap[childItem]}" requiredMessage="value required" /> 

含義您切換與同一個bean值所需的屬性作爲用於殘疾人屬性,只需添加一個!

+0

還有一個問題。你可以看看這個問題,請:[鏈接](http://stackoverflow.com/questions/13740924/jsf-2-1-selectonelistbox-component-does-not-set-new- value) – Nurjan

0

如果你想通過的commandButton通過驗證,那麼你可以實現

<f:validator validatorId="EmailValidator" disabled="#{param['disableValidation']}" /> 

動態地啓用和禁用形式電子郵件驗證。

<p:commandButton 
            icon="ui-icon-remove" id="removeBtn" 
            title="#{commonLbl.cmdRemoveCon}" 
            disabled="#{pc_searchProspectBean.searchProspectVO.prospectVO.removeContactFlg}" 
            styleClass="btn btn-sm btn-primary" 
            action="#{pc_searchProspectBean.doRemoveContact(prospectTbl.indexId)}" 
            update=":frm1:pnlProspectContact" onclick="modalDialog.show()" 
            oncomplete="modalDialog.hide()"> 
            <f:param name="disableValidation" value="true" /> 
           </p:commandButton>