2013-09-19 3 views
0

У меня есть приложение, использующее JSF 2.0, javascript и запрос 1.9. У меня есть ситуация, когда мне нужно условно отображать компонент в зависимости от результата метода bean. Логика прямо сейчас заключается в том, что при нажатии кнопки javascript показывает компонент с успешным сообщением в определенном стиле .css. Что мне нужно, так это то, что при нажатии этой же кнопки javascript вызывает метод bean, и в зависимости от результата этого метода отображает тот же компонент успеха или другой компонент, объясняющий, почему это не удалось. Я знаю, что ни javascript, ни jquery не могут напрямую вызвать метод bean, поэтому вместо этого javascript щелкнет скрытую кнопку, которая вызывает метод bean. Итак, в общем, это то, что я хочу делать.Последовательное выполнение javascript

Фасоль код

public boolean getValidated(){ 
    return validated; 
} 

public void setValidated(boolean value){ 
    validated = value; 
} 

public void myMethod(){ 
    .... 
    if(condition){ 
     validated = true; 
    }else{ 
     validated = false; 
    } 
} 

JSF КОД

<h:commandButton onclick="magic()/> 
<h:commandButton id="hiddenButton" action="#{bean.myMethod}" style="display:none;"/> 

<script type="text/javascript"> 
    // <![CDATA[ 
function magic(){ 
    document.getElementById('hiddenButton').click(); 
    if(#{bean.validated}){ 
    NI.pnx.messaging.popMessage(NI.pnx.messaging.messageTypes.success,['<strong>The requested updates have been saved.</strong> <a href="" class="right"><strong>Undo Change</strong></a>'],NI.pnx.messaging.messageTimeoutSpeeds.slow); 
    }else{ 
    NI.pnx.messaging.popMessage(NI.pnx.messaging.messageTypes.error,['<strong>The requested updates have not been saved.</strong> <a href="" class="right"><strong>Undo Change</strong></a>'],NI.pnx.messaging.messageTimeoutSpeeds.slow); 
    } 
} 
    // ]]> 
</script> 

Вопрос заключается в том, что Javascript, кажется, проверяя проверенную атрибут перед MyMethod() даже сделано. Таким образом, он довольно сильно нажимает на скрытую кнопку и сразу же запрашивает значение логического значения, а myMethod() еще не сделано.

Как я могу заставить javascript вести себя последовательным образом?

Спасибо!

ответ

1

Просто позвольте кнопке команды условно отобразить сам скрипт.

<h:commandButton value="magic" action="#{bean.myMethod}"> 
    <f:ajax render="script"> 
</h:commandButton> 

<h:panelGroup id="script"> 
    <h:outputScript rendered="#{facesContext.postback}"> 
     <![CDATA[ 
      if (#{bean.validated}) { 
       NI.pnx.messaging.popMessage(NI.pnx.messaging.messageTypes.success,['<strong>The requested updates have been saved.</strong> <a href="" class="right"><strong>Undo Change</strong></a>'],NI.pnx.messaging.messageTimeoutSpeeds.slow); 
      } else { 
       NI.pnx.messaging.popMessage(NI.pnx.messaging.messageTypes.error,['<strong>The requested updates have not been saved.</strong> <a href="" class="right"><strong>Undo Change</strong></a>'],NI.pnx.messaging.messageTimeoutSpeeds.slow); 
      } 
     ]]> 
    </h:outputScript> 
</h:panelGroup> 

Если вы используете настоящий JSF валидатор, то вы можете просто использовать #{facesContext.validationFailed} вместо того, чтобы вручную отслеживать его в бобе.


Unrelated к конкретной проблеме, вы можете найти PrimeFaces <p:growl> более полезным, чем это переосмысление колеса.

+0

Невозможно использовать примитивы ... Локальный репозиторий maven. Тем не менее, эта команда для меня нова, поэтому я собираюсь ее проверить. Спасибо, BalusC! – Nacho321

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