JSF - 模板和ajax调用 - 最佳实践

时间:2010-11-24 17:55:51

标签: jsf jsf-2 facelets

我会尝试用很少的代码解释我的dubt:

template.xhtml - 这里我加载一个名为get参数的页面(例如index.xhtml?page = homepage => i load 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;
    }
}

我将在模板上定义的panelGroup content上加载新数据。

麻烦的是,当我调用它时,我丢失了page parameter(先前在选择器bean上设置),我无法重新加载当前页面。

所以,你的诀窍是:

1 - 把豆子放入SessionScoped?

2 - 通过ajax调用get值?

3 - 以其他方式定义我自己的应用程序?

任何建议都将受到赞赏:)

1 个答案:

答案 0 :(得分:1)

以相同的形式将其作为隐藏输入值传递给下一个请求。

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