JSF - шаблон и вызов ajax - лучшие практики - PullRequest
0 голосов
/ 24 ноября 2010

Я попытаюсь объяснить мой дублет в очень нескольких строках кодов:

template.xhtml - здесь я загружаю страницу, названную параметром get (например, index.xhtml? Page = homepage => я загружаю homepage.xhtml)

<h:panelGroup layout="block" id="content">
    <c:catch>
        <ui:include src="#{selector.page}.xhtml" />
    </c:catch>
</h:panelGroup>

homepage.xhtml - моя домашняя страница (которая изменится, если я вошел в систему или нет)

<h:panelGroup rendered="#{!login.loggedIn}">
    <h:outputLabel styleClass="content_title" value="im not logged" />
</h:panelGroup>
<h:panelGroup rendered="#{login.loggedIn}">
    <h:outputLabel styleClass="content_title" value="im logged" />
</h:panelGroup>

ajax call - вот в чем настоящая проблема; если я сделаю звонок, как это:

<f:ajax event="action" execute="param1 param2" render=":content"/>

selector bean:

package model;

import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="selector")
@RequestScoped
public class Selector {
    @ManagedProperty(value="#{param.page}")
    private String page;

    public String getPage() {
        if(page.compareTo("")==0) {
            this.page="homepage";
        }
        return page;
    }

    public void setPage(String page) {
        this.page=page;
    }
}

Я загружу новые данные в группу Panel content, которая определена в шаблоне.

Проблема в том, что когда я вызываю это, я теряю page parameter (установленный ранее на компоненте селектора), и я не могу перезагрузить текущую страницу.

Итак, уловка для вас:

1 - поставить боб SessionScoped?

2 - Пройдите через вызов ajax, получить значение?

3 - Определить мое собственное приложение другим способом?

Любое предложение будет оценено :)

1 Ответ

1 голос
/ 24 ноября 2010

Передайте его следующему запросу как скрытое значение ввода в той же форме.

<h:inputHidden value="#{selector.page}" />
...