在我的基於JSF 2的應用程序中,我有一個表單(包括其他UI組件)中的一些複選框。經過驗證錯誤後續ajax請求從UI組件獲取值而不是從豆
在複選框上,我已經註冊了ajax請求,它們在被檢查時觸發。 ajax請求實際上只會更新後臺bean中另一個複選框的值。 因此,其他複選框也會被檢查(當它被重新渲染時 - 因爲它將在渲染響應階段從支持bean中獲取更新值)。
這工作正常,直到整個表單被提交併發生驗證錯誤。 然後,ajax請求仍然可以工作並更改輔助bean上的值,但是在重新呈現更新複選框的階段,其值不是從支持bean中獲取的,而是從ComponentStateHelper
類中獲取的緩存值中獲取的。
據我瞭解,這是用於JSF 2的新功能,只存儲對組件樹的部分更改。
我不明白的是:這與驗證階段有什麼關係?爲什麼當驗證發現錯誤時,我的複選框在StateHelper
類中存在緩存值?
非常感謝您的回答。無論如何,我已經將你的omnifaces庫包含在我的項目中(對於'FullAjaxExceptionHandlerFactory')。所以很容易在我的'faces-config.xml'文件中包含'ResetInputAjaxActionListener'。 但是這只是在'InvokeApplicationPhase'中調用的,它沒有被我的ajax請求命中。我的ajax請求由一個''觸發,並在那裏由''觸發。 但我會仔細看看這個。我只是很快嘗試了你的建議。 –
Jens
它沒有被擊中?你確定?編輯faces-config後,您可能需要重新啓動服務器。 – BalusC
我確實重新啓動了它,並添加了omnifaces的源並設置了一個斷點以查看它是否被命中。它確實遇到了常規請求,但不會受到由選擇複選框觸發的ajax請求。 – Jens