Ui:Include com JSF2 e Ajax

5 respostas
rbroz85

Bom dia amigos.

esse lance de include dinamico ja ta meio batido...
mas meu problema deve ser no ajax do JSF2.. nao sei... bem... tenho isso:

Pagina principal
<h:form>
            
            <h:commandButton value="Page One" action="#{pageControl.showPage1}">
                <f:ajax render="pagesSubs"/>
            </h:commandButton>
            <h:commandButton value="Page Two" action="#{pageControl.showPage2}">
                <f:ajax render="pagesSubs"  />
            </h:commandButton>

            <br/>
            <hr />
            <h:panelGroup id="pagesSubs">
                <h:outputText value="Pagina Ativa: #{pageControl.activePage}"/>
                <ui:include src="#{pageControl.activePage}"/>
            </h:panelGroup>
            <hr />

        </h:form>

e tenho um controlador das paginas:

@ManagedBean
@SessionScoped
public class PageControl implements Serializable{

    private String activePage = "pageone.xhtml";
    private String page11 = "pageone.xhtml";
    private String page22 = "pagetwo.xhtml";
    private String page33 = "pagethree.xhtml";

    /** Creates a new instance of PageControl */
    public PageControl() {
    }

    public String getActivePage() {
        return activePage;
    }

    public void setActivePage(String activePage) {
        this.activePage = activePage;
    }

    public void showPage1(){
        setActivePage(this.page11);
    }
    public void showPage2(){
        setActivePage(this.page22);
    }
    public void showPage3(){
        setActivePage(this.page33);
    }

}

o comportamento desejado: clicar no botao e mostrar o nome da pagina no campo é que esta acontecendo e que para funcionar eu tenho que clicar 2 vezes no mesmo botao para meu include funcionar...

como posso resolver isso ? é o problema no ajax ?

obrigado a todos desde já.

5 Respostas

rbroz85

problema resolvido:

<h:commandButton value="Page Two" action="#{pageControl.showPage2}"> <f:ajax execute="@this" render="@none" /> <f:ajax execute="@none" render=":pagesSubs" /> </h:commandButton>

rbroz85

e pra quem estiver usando primeFaces

funciona assim:

<p:commandButton value="GotoPageOne" action="#{pageControl.showPage1}" process="@this" update="@none" oncomplete="remoteUpdate()" /> <p:commandButton value="GotoPageTwo" action="#{pageControl.showPage2}" process="@this" update="@none" oncomplete="remoteUpdate()"/> <p:remoteCommand name="remoteUpdate" process="@none" update="pagesSubs" />

clebiovieira

rbroz85:
e pra quem estiver usando primeFaces

funciona assim:

<p:commandButton value="GotoPageOne" action="#{pageControl.showPage1}" process="@this" update="@none" oncomplete="remoteUpdate()" /> <p:commandButton value="GotoPageTwo" action="#{pageControl.showPage2}" process="@this" update="@none" oncomplete="remoteUpdate()"/> <p:remoteCommand name="remoteUpdate" process="@none" update="pagesSubs" />

Cara, pq vc usa o remoteCommand ? isso obriga rederizar pela segunda vez ?

rbroz85

Estou usando esse remoteCommando pois foi a unica solução que eu encontrei. de todos os modos que tentei nao consegui.
sim parece que isso renderiza uma segunda vez.

da fonte que eu achei o cara disse:
“I found a workaround that works… not sure what the overhead is, but it doesn’t seem to be too expensive.”

agora nao tenho certeza se renderiza 2 vezes. =/

mas no JSF2 puro… funciona com 2 ajax tmb:

<h:commandButton value="Page Two" action="#{pageControl.showPage2}"> <f:ajax execute="@this" render="@none" /> <f:ajax execute="@none" render=":pagesSubs" /> </h:commandButton>

isso nao estaria renderizando 2 vezes tmb ? uma vez ele (o proprio objeto) depois o local (div) que eu quero.

bem a fonte que encontrei isso esta em:
http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=1251&start=10 (no post 14 do user: nch)

clebiovieira

rbroz85:
Estou usando esse remoteCommando pois foi a unica solução que eu encontrei. de todos os modos que tentei nao consegui.
sim parece que isso renderiza uma segunda vez.

da fonte que eu achei o cara disse:
“I found a workaround that works… not sure what the overhead is, but it doesn’t seem to be too expensive.”

agora nao tenho certeza se renderiza 2 vezes. =/

mas no JSF2 puro… funciona com 2 ajax tmb:

<h:commandButton value="Page Two" action="#{pageControl.showPage2}"> <f:ajax execute="@this" render="@none" /> <f:ajax execute="@none" render=":pagesSubs" /> </h:commandButton>

isso nao estaria renderizando 2 vezes tmb ? uma vez ele (o proprio objeto) depois o local (div) que eu quero.

bem a fonte que encontrei isso esta em:
http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=1251&start=10 (no post 14 do user: nch)

Cara pior que eu tava quase comprando o guia do primefaces 9.0 EUR. Pow desanimei com todos esses bugs e pouca explicação. Dei uma olhada no guia pago da versão 2.1, é um guia bem básico mesmo, achei que eles iriam detalhar mais por ser pago. Fiquei na experança de ter as souluções para coisas básicas como essa que estamos passando.

Vamos continuar com o bacalhau… ;(

Abraços.

Criado 15 de março de 2011
Ultima resposta 16 de mar. de 2011
Respostas 5
Participantes 2