Jsf 如果未调用控件,则在中使用commandButton

Jsf 如果未调用控件,则在中使用commandButton,jsf,if-statement,primefaces,Jsf,If Statement,Primefaces,我正在使用jsf和Primefaces组件。我需要根据输入值clic命令按钮。这是我的html代码: <h:form id="mainform"> <p:panel id="panelform" header="Email Extractor" > <h:panelGrid id="formulaire" columns="2"> <h:panelGrou

我正在使用jsf和Primefaces组件。我需要根据输入值clic命令按钮。这是我的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>  

标签
中的commandButton总是被调用,而标签
中的commandButton无论我输入9还是15作为数字输入值都不会被调用。
有什么解释和帮助吗?

看起来问题出在
c:if
标签上。JSTL标记在视图构建期间进行评估,此时bean值不可用,因此您的
mailMB.number
总是小于11。看一看,了解一些细节

一种解决方案是使用带有
呈现属性的JSF组件

类似这样的内容:

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

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

//第一命令按钮
//第二命令按钮

应该有效。

问题似乎出在
c:if
标签上。JSTL标记在视图构建期间进行评估,此时bean值不可用,因此您的
mailMB.number
总是小于11。看一看,了解一些细节

一种解决方案是使用带有
呈现属性的JSF组件

类似这样的内容:

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

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

//第一命令按钮
//第二命令按钮

应该可以工作。

根据注释:不要创建两个按钮,使用一个按钮并从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>

函数showResultPanel(参数){
if(args&&!args.validationFailed){
var$input=jQuery(“输入[id$='Emailsnbr']”);
$input.val()>10?purchase.show():emailsList.show();
}
}

您可能可以将其折叠到
oncomplete
属性中,我只是想让它更清楚。

根据注释:不要创建两个按钮,使用一个按钮并从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>

函数showResultPanel(参数){
if(args&&!args.validationFailed){
var$input=jQuery(“输入[id$='Emailsnbr']”);
$input.val()>10?purchase.show():emailsList.show();
}
}

您可能可以将其折叠到
oncomplete
属性中,我只是想让它更清楚。

唯一的区别是
oncomplete
属性吗?那么为什么不在其中获取所需的值呢?@mabi yes只有oncomplete属性不同。我没有收到你的建议,你能说清楚吗?唯一的区别是
oncomplete
属性吗?那么为什么不在其中获取所需的值呢?@mabi yes只有oncomplete属性不同。我没有得到你的建议,你能说清楚吗?即使使用rendred,它对我也不起作用。它总是得到小于10+1的数值来解释原因,但问题可能用另一种方法解决得更好。即使使用rendred,它对我也不起作用。它总是得到小于10+1的数值来解释原因,但这个问题可能通过另一种方式得到更好的解决?