加载缓存页面后,JSF使用ajax更新页面组件

时间:2016-09-06 16:44:54

标签: ajax jsf caching primefaces

我正在使用JSF和Primefaces开发网站。

我们最近在我们的Apache反向代理上启用了mod_cache,它适用于完全静态的页面,并且每个用户的显示方式完全相同。但是,我们希望在其他页面上启用缓存,如果用户登录了他的名字,则会在导航栏中显示。

我希望实现的理想行为:

  1. 最初页面没有任何用户数据(因此可以缓存并显示给其他用户)

  2. AJAX请求被发送到后端以查明用户是否已登录,如果他是

  3. ,则查明他的姓名
  4. 使用javascript
  5. 将数据放在页面上

    虽然这个想法似乎并不困难,但我发现很难付诸实践。例如,当我调用隐藏按钮发送操作请求时,我看到后端加载了数据,但是在前端javascript日志记录中并不总是存在。

    实现我想要的行为的最佳方式是什么?

    我尝试了什么:

                       <script>
                            window.onload = function() {
                                console.log("Request navbar update");
                                document.getElementById('hidden:link').onclick();
                            }
                        </script>
    
                        <h:panelGroup id="navbarResponseHandlerPanel">
                        <script>
                            function navbarResponseHandler(){
                                    $('#dropdown-logged-out').toggle(#{currentUserNavbarBean.baseUser eq null});
                                    $('#dropdown-logged-in').toggle(#{currentUserNavbarBean.baseUser ne null});
                                    $('.dropdown-username').text('#{currentUserNavbarBean.baseUser.displayName}');
                                    console.log('#{currentUserNavbarBean.baseUser.displayName}');
                            }
                        </script>
                        </h:panelGroup>
    
                        <h:form id="hidden" style="display:none">
                            <p:commandButton id="link" action="#{currentUserNavbarBean.loadUser()}" update=":navbarResponseHandlerPanel" oncomplete="navbarResponseHandler()" />
                         </h:form>
    

    (currentUserNavbarBean.loadUser()从会话bean设置baseUser字段。它似乎不能与RequestScope一起使用。我可能会尝试将其设置为SessionScope,但是我必须在页面呈现后重置它,所以如果用户转到另一个页面,用户名将不会立即填写并且不会被缓存)

0 个答案:

没有答案