a4j jsFunction不触发服务器端方法

时间:2014-01-28 17:19:44

标签: javascript jsf richfaces ajax4jsf

我像这样调用客户端函数: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();
}

2 个答案:

答案 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。