我正在使用JSF和Primefaces开发网站。
我们最近在我们的Apache反向代理上启用了mod_cache,它适用于完全静态的页面,并且每个用户的显示方式完全相同。但是,我们希望在其他页面上启用缓存,如果用户登录了他的名字,则会在导航栏中显示。
我希望实现的理想行为:
最初页面没有任何用户数据(因此可以缓存并显示给其他用户)
AJAX请求被发送到后端以查明用户是否已登录,如果他是
虽然这个想法似乎并不困难,但我发现很难付诸实践。例如,当我调用隐藏按钮发送操作请求时,我看到后端加载了数据,但是在前端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,但是我必须在页面呈现后重置它,所以如果用户转到另一个页面,用户名将不会立即填写并且不会被缓存)