使用Ajax重新加载div

时间:2011-07-17 14:14:03

标签: ajax jsf-2

我找到了this主题,其中有一些代码可以使用Ajax重新加载div。 我试过创建这样的例子,但没有成功。

这是我的代码:

  • 的index.xhtml             

            <h:form>
                <f:ajax render=":content">
                    <h:commandButton value="News" action="#{navigationBean.requestPage}">
                        <f:param name="requestedPage" value="news.xhtml"/>
                    </h:commandButton>
                </f:ajax>
                <br/><br/>
                <f:ajax render=":content">
                    <h:commandButton value="News" action="#{navigationBean.requestPage}">
                        <f:param name="requestedPage" value="games.xhtml"/>
                    </h:commandButton>
                </f:ajax>
            </h:form>
    
        </h:panelGroup>
    
        <h:panelGroup id="content" layout="block">
            <ui:include src="#{navigationBean.viewedPage}"/>
        </h:panelGroup>
    
  • 支持豆

    @ManagedBean
    @ViewScoped
    public class NavigationBean
    {
        private String viewedPage;
    
        public NavigationBean()
        {
            viewedPage = "news.xhtml";
        }
    
        public String getViewedPage()
        {
            return viewedPage;
        }
    
        public void setViewedPage(String viewedPage)
        {
            this.viewedPage = viewedPage;
        }
    
        public void requestPage()
        {
            Map<String,String> map = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
            viewedPage = map.get("requestedPage");
        }
    }
    
  • 它看起来如何: enter image description here

那我错过了什么?变量ViewedPage已更新,正常标签/文本等已更新,但无法使此div工作。

1 个答案:

答案 0 :(得分:1)

找到解决方案:

<h:commandButton value="Games" action="#{navigationBean.requestPage}">
    <f:param name="requestedPage" value="games.xhtml"/>
    <f:ajax execute="@this" render="@none" />
    <f:ajax render=":content"/>
</h:commandButton>

将@ViewScoped更改为@SessionScoped。