2013-06-12 3 views
2

Я много читал о f: ajax, работающем с другими тегами jsf или html, но этого, похоже, недостаточно!Действие JSF никогда не срабатывало по h: commandButton (с f: ajax)

У меня есть commandButton с (необходимым?) Тегом f: ajax на моей странице, и действие никогда не запускается. Вот код.

<html> 
    <h:head> 
    </h:head> 

    <h:body> 
    <h:form> 
     <h:commandButton action="#{bean.myFirstFunction}" value="Submit"> 
     <f:ajax render=":wrap" /> 
     </h:commandButton> 
    </h:form> 

    <h:panelGroup id="wrap"> 
     <h:panelGroup id="content" rendered="#{bean.myVariable != null}"> 

     <h:form> 
     <h:commandButton action="#{bean.mySecondFunction}" value="Submit"> 
      <f:ajax render=":wrap" /> 
     </h:commandButton> 
     </h:form> 

     </h:panelGroup> 
    </panelGroup> 
    <h:body> 
</html> 

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

Вот боб.

@ManagedBean(name = "bean") 
@ViewScoped 
public class myBean { 
    private Object myVariable; 

    public void setMyVariable(Object o) { ... } 
    public Object getMyVariable() { ... } 

    @PostConstruct 
    public void init() { 
    this.myVariable = null; 
    } 

    public void myFirstFonction() { 
    this.myVariable = new Object(); 
    } 

    public void mySecondAction() { 
    System.out.println("here"); 
    } 
} 

Когда я запускаю, я вижу первую кнопку. Я нажимаю на него, а второй появляется. (поэтому вызывается первая функция, экземпляр объекта и тэг ajax обертывается. Однако, когда нажата вторая кнопка, ничего не происходит.

Я написал только часть своего кода. Надеюсь, ошибка здесь.

Я думаю, что об оказанной опции группы панели, но я не могу найти его точно.

Благодаря

ответ

0

я решил сделать что-то проще. на самом деле, я не Мне действительно нужна ajax на моей странице, потому что мой bean-компонент находится в ViewScope. Таким образом, страница может быть перезагружена, проблема. Поэтому я избавился от своих тегов f: ajax и все правильно.

3

Согласно пункту 9 из commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated, вы жертве JSF spec issue 790. Когда вы ajax-обновляете некоторый контент, который, в свою очередь, содержит форму, он потеряет свое состояние представления. В качестве быстрого обходного решения просто дайте обновляемой форме идентификатор и явно ссылайтесь на него в <f:ajax render>.

<h:body> 
    <h:form> 
     <h:commandButton action="#{bean.myFirstFunction}" value="Submit"> 
     <f:ajax render=":wrap :wrapForm" /> 
     </h:commandButton> 
    </h:form> 

    <h:panelGroup id="wrap"> 
     <h:panelGroup id="content" rendered="#{bean.myVariable != null}"> 

     <h:form id="wrapForm"> 
     <h:commandButton action="#{bean.mySecondFunction}" value="Submit"> 
      <f:ajax render=":wrap" /> 
     </h:commandButton> 
     </h:form> 

     </h:panelGroup> 
    </panelGroup> 
    <h:body> 
+0

Должно ли это работать с управляемым компонентом RequestScope? –

+0

Точка 9 из https://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is-not-being-invoked/2120183#212018 – Saljack

+0

@Saljack: Да, список постоянно обновляется с тех пор. – BalusC