2012-12-05 56 views
3

我想要做的只是一個簡單的註銷功能。主頁面將調用模板頁面;由標題和內容組成。標題包含註銷按鈕。在頁面中會有兩種形式,一種在標題(註銷按鈕),一種在內容中(很少的按鈕,鏈接等)。與ajax命令鏈接只能在第二次點擊時工作

我的問題是頁面刷新時,第一次點擊註銷鏈接,只有第二次點擊後進行。當我在內容表單中包含primefaces或ajax代碼時,問題開始出現。當我刪除特定的代碼時,註銷按預期工作。

註銷形式主要模板templateUser.xhtml

<h:form id="logout"> 
    <h:commandLink action="#{tenantController.customLogout(e)}" 
     id="logoutBtn" immediate="true" value="Logout" /> 
</h:form> 

的支持bean:

public String customLogout(ActionEvent e) { 
    return "login.xhtml"; 
} 

FYI:在customLogout方法還包括會議的破壞,但我只是把頁面重定向這裏。

在客戶端模板,模板被指定爲:

<ui:composition template="/templateUser.xhtml"> 

對於JSF庫,目前使用JSF 2.0

解決方案我已經試過:

  • immediate="true"
  • put id for form和commandLink(模板形式&內容fo rm)
  • 使用primefaces(<p:commandLink> with ajax false ==>這個回到上一頁;後臺Bean中的方法未運行。

下面是幾個環節我想在這裏:

回答

1

的問題開始出現,當我包括primefaces或Ajax代碼內容表單內。當我刪除特定的代碼時,註銷按預期工作。

你的問題是由點7如commandButton/commandLink/ajax action/listener method not invoked or input value not updated描述引起的。當您使用<f:ajax>觸發ajax請求並執行也涵蓋所有其他表單的更新時,所有其他表單將失去其視圖狀態。這會導致第一次提交將始終「無所作爲」,但下一次提交將會正常工作,這與您的問題症狀完全匹配。

您可以通過以下方式之一解決這個問題:

  1. 明確指定的所有其他形式的<f:ajax render>客戶端ID。您可以指定多個分隔的客戶端ID空間。例如。h:commandButton/h:commandLink does not work on first click, works only on second click

    <f:ajax ... render="someComponent otherComponent :loginForm" /> 
    
  2. 在這個答案建議使用基於JavaScript的修復。

+0

感謝您的提示,BalusC。將嘗試解決方案。 – wanw84

相關問題