【问题标题】:JSF - template and ajax call - best practicesJSF - 模板和 ajax 调用 - 最佳实践
【发布时间】:2010-11-24 17:55:50
【问题描述】:

我会尽量用几行代码来解释我的问题:

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;
    }
}

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

问题是当我调用这个时,我丢失了page parameter(之前在选择器bean上设置的),我无法重新加载当前页面。

所以,你的诀窍是:

1 - 把 bean SessionScoped?

2 - 通过 ajax 调用获取值?

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

任何建议将不胜感激:)

【问题讨论】:

    标签: jsf jsf-2 facelets


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,是的。事实上,这对我来说听起来很奇怪,因为在“执行”时我只想传递几个参数,而不是整个表单(正如我们昨天讨论的那样)。我必须在这个框架上理解这一点:)
    • 现在尝试过这种方式,不幸的是没有加载该内容。我想我需要(首先)在我的 Selector Bean 上设置一个默认值。观看更新的代码:当我在模板上调用 #{selector.page} 时,它没有得到“索引”。不知道为什么...
    • 哦不,是的,它有效。我只需要将 inputhidden 称为“页面”:) 无论如何我仍然可以为 bean 设置默认值。感谢BalusC的提示,看起来你是JSF的大师:)
    • 添加了实际的 Bean。它不会将“主页”作为默认值(如果 get 上没有 page=value 参数)。
    • 使用if (page == null || page.trim().isEmpty()) 而不是与空字符串进行比较。
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 2019-02-10
    • 2012-08-03
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多