我像这样调用客户端函数:invalidateUserSession()。我知道客户端功能已被触发,因为我在oncomplete事件中发出了警报。由于某种原因,从不调用服务器端方法。
客户端代码:
<a4j:jsFunction
name="invalidateUserSession"
action="#{billingController.invalidateSession}"
immediate="true"
oncomplete="alert('invalidate');"
/>
服务器端代码:
public void invalidateSession(){
log.info("Invalidation session...");
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}
答案 0 :(得分:1)
根据评论,只需从标记中删除immediate=true
。
强制性链接:Debugging JSF lifecycle
另请注意you are still displaying the user's data并且可能希望在会话失效后重定向/重新获取页面。
答案 1 :(得分:0)
您的操作应返回Object,例如String。请参阅VDL documentation中的action
属性说明:
MethodExpression,表示此组件发生时要调用的应用程序操作 由用户激活。表达式必须求值为不带的公共方法 参数,并返回一个Object(调用toString()来派生逻辑 结果)传递给此应用程序的NavigationHandler。
在方法签名中简单地将void更改为String。