2014-01-29 3 views
0

Я работаю с компонентами jsf и Primefaces. Мне нужно сделать clic commandButton в зависимости от входного значения. Это мой HTML-код:commandButton in, если управление не вызывается

<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 в теге <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, чтобы получить подробную информацию об этом.

Одним из решений является использование некоторого компонента JSF с атрибутом rendered.

Что-то вроде этого:

<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

Смежные вопросы