如果没有调用control,则commandButton

时间:2014-01-29 10:01:21

标签: jsf if-statement primefaces

我正在使用jsf和Primefaces组件。我需要根据输入值做clic the commandButton。这是我的HTML代码:

   <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}">中的commandButton,而不是标记<c:if test="#{mailMB.number gt 10}">中的commandButton,我输入9或15作为数字输入的值。 任何解释和帮助如何使这项工作?

2 个答案:

答案 0 :(得分: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>

应该有用。

答案 1 :(得分: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属性中,我只是想让它更清晰。