2014-01-29 53 views
0

我正在使用jsf和Primefaces組件。我需要根據輸入值來執行命令按鈕。這是我的html代碼:commandButton in if控件未調用

<h:form id="mainform"> 
     <p:panel id="panelform" header="Email Extractor" >   
      <h:panelGrid id="formulaire" columns="2"> 
       <h:panelGroup id="formblock" layout="block" > 
        <p:panelGrid columns="2">                 
         <p:outputLabel for="Emailsnbr" value="Enter the emails'number:" /> 
         <p:inputText id="Emailsnbr" type="number" requiredMessage="Emails number is required" 
             value="#{mailMB.number}" required="true" label="Emailsnbr">  
         </p:inputText> 
        </p:panelGrid> 
       </h:panelGroup> 
      </h:panelGrid> 
      <c:if test="#{mailMB.number gt 10}"> 
       <p:commandButton value="Extract" style="width: 8%;height: 100%" update="tableemails, :confirmPurchase, :mainform" id="extractbutton" ajax="true" widgetVar="ButtonExtract" 
           actionListener="#{mailMB.searchEmails()}" 
            oncomplete="if (args &amp;&amp; !args.validationFailed) purchase.show();"/>       
     </c:if> 
      <c:if test="#{mailMB.number lt 11}"> 
      <p:commandButton value="Extract" style="width: 8%;height: 100%" update="tableemails, :confirmPurchaseTest, :mainform" id="extractbuttonTest" ajax="true" widgetVar="ButtonExtract" 
           actionListener="#{mailMB.searchEmails()}" 
            oncomplete=" if (args &amp;&amp; !args.validationFailed) emailsList.show();"/>       
      </c:if>   
      </p:dialog> 
     </p:panel> 
    </h:form> 

命令按鈕在標籤<c:if test="#{mailMB.number lt 11}">總是被調用,從來沒有一在標籤<c:if test="#{mailMB.number gt 10}">任我進入9或15爲數字輸入的值。 任何解釋和幫助如何使這項工作?

+0

'oncomplete'屬性的唯一區別是什麼?那麼爲什麼不抓住那裏的所需價值呢? – mabi

+0

@mabi是隻有oncomplete屬性不同。我沒有得到你的建議,你能說清楚嗎? –

回答

1

按照評論:不要創建兩個按鈕,使用一個,抓住從頁面的價值在JavaScript本身:

<p:commandButton value="Extract" style="width: 8%;height: 100%" 
    update="tableemails, :confirmPurchaseTest, :mainform" 
    id="extractbutton" ajax="true" 
    widgetVar="ButtonExtract" 
    actionListener="#{mailMB.searchEmails()}" 
    oncomplete="showResultPanel(args);" /> 

<h:outputScript> 
    function showResultPanel(args) { 
     if (args && !args.validationFailed) { 
     var $input = jQuery("input[id$='Emailsnbr']"); 
     $input.val() > 10 ? purchase.show() : emailsList.show(); 
     } 
    } 
</h:outputScript> 

你或許可以摺疊該進oncomplete屬性,我只是想使其更清晰。

3

它看起來像問題是c:if標籤。 JSTL標籤在視圖編譯期間進行評估,此時bean值不可用,因此您的mailMB.number始終小於11.請查看this question以獲取有關此的詳細信息。

一個解決方案是使用一些帶有rendered屬性的JSF組件。

事情是這樣的:

<h:panelGroup rendered="#{mailMB.number gt 10}"> 
    // first commandButton 
</h:panelGroup> 

<h:panelGroup rendered="#{mailMB.number lt 11}"> 
    // second commandButton 
</h:panelGroup> 

應該工作。

+0

即使是百分之一,它對我來說也不起作用,它總是得到小於10 –

+0

+1的數值來解釋*爲什麼*,但這個問題有可能以更好的方式解決? – mabi