【问题标题】:commandButton in if control does not invoked如果控件未调用,则在 commandButton
【发布时间】:2014-01-29 10:01:20
【问题描述】:

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

标签&lt;c:if test="#{mailMB.number lt 11}"&gt; 中的commandButton 总是被调用,而不是标签&lt;c:if test="#{mailMB.number gt 10}"&gt; 中的命令按钮,我输入9 或15 作为数字输入的值。 任何解释和帮助如何使这项工作?

【问题讨论】:

  • 唯一的区别是oncomplete 属性吗?那为什么不在那里获取所需的值呢?
  • @mabi 是的,只有 oncomplete 属性不同。我没有得到你的建议你能说清楚吗?

标签: jsf if-statement primefaces


【解决方案1】:

看起来问题出在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>

应该可以。

【讨论】:

  • 即使使用渲染它对我也不起作用,它总是得到小于 10 的数字的值
  • +1 用于解释为什么,但问题可能以另一种方式更好地解决?
【解决方案2】:

根据 cmets:不要创建两个按钮,使用一个并从 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 属性中,我只是想让它更清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2013-07-30
    • 1970-01-01
    • 2012-02-11
    • 2012-10-30
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多