當用戶單擊任何commandButton
時,將在託管bean中調用相應的操作。 是否有可能從@PostConstruct
方法或從事件偵聽器方法獲取此操作名稱?JSF在託管bean中獲取當前操作
回答
按鈕的名稱=值對本身可用作HTTP請求參數的常用方式。可想而知,命令按鈕的生成的HTML表示看起來像這樣
<input type="submit" name="formId:buttonId" value="Submit" ... />
然後,它的存在作爲一個請求參數與名稱formId:buttonId
具有非空值。 JSF在Apply Request Values階段使用這些信息來確定按鈕是否被按下。這種情況與按鈕組件相關聯的渲染器的decode()
方法期間,大致如下:
if (externalContext.getRequestParameterMap().containsKey(component.getClientId(context))) {
component.queueEvent(new ActionEvent(component));
}
或當它涉及一種AJAX請求,則該按鈕的名稱,而不是可作爲javax.faces.Source
請求參數的值。
if (component.getClientId(context).equals(externalContext.getRequestParameterMap().get("javax.faces.Source"))) {
component.queueEvent(new ActionEvent(component));
}
無論哪種方式,ActionEvent
最終存儲爲UIViewRoot
私有字段這是沒有可用的公共API的方式。所以,除非你抓住反思和實施的具體黑客,這是故事的結束。
要確定按下按鈕,最好的辦法就是像JSF本身一樣手動檢查請求參數映射。
根據具體功能要求,這是不是從問題十分清楚,另一種可能是在所有感興趣的UICommand
組件使用actionListener
或<f:actionListener>
,或使用<action-listener>
在faces-config.xml
註冊一個全球性的。這將被調用之前真實action
被調用。
UIComponent sourceComponent = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
歡迎來到堆棧溢出!儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – 2018-02-02 09:52:53
此版本的信息也應該添加。可能不適用於舊版本 – Kukeltje 2018-02-02 16:04:57
- 1. JSF託管bean
- 2. JSF託管Bean在Servlet中
- 3. JSF的託管bean
- 4. JSF託管bean&Taglib
- 5. JSF中的託管bean
- 6. JSF從一個託管bean獲取值作爲參數
- 7. 如何在JSF中按名稱獲取託管的bean?
- 8. 在JSF中從託管bean獲取資源文件的路徑
- 9. 在JSF託管bean中獲取GET參數
- 10. 在運行時獲取JSF中所有託管Bean的列表
- 11. JSF - 託管bean的變量?
- 12. JSF託管bean問題
- 13. 屬性以JSF託管bean
- 14. JSF託管的上傳bean?
- 15. JSF託管bean EJB注入
- 16. 獲取託管bean中的完整url JSF Spring
- 17. 將JSF託管bean轉換爲CDI Bean
- 18. jsf調用另一個託管bean的託管bean方法
- 19. 獲取其他託管bean託管bean參考
- 20. 如何從jersey.servlet.ServletContainer託管bean獲取Spring託管bean?
- 21. 初始化在JSF託管bean
- 22. JSF 1.2託管bean如何獲取getter值
- 23. 如何獲取JSF託管bean的包路徑?
- 24. JSF 2 - 從託管bean獲取PhaseListener的實例
- 25. 注入Spring管理的SessionFactory的bean在JSF託管bean
- 26. 在JSF中,如何使用ELResolver獲得託管bean的屬性
- 27. 獲取在服務CDI託管的bean
- 28. JSF託管的bean沒有出現在JSF頁面中
- 29. 獲取當前XHTML頁面的URL,該頁面將用戶數據填入JSF託管bean中
- 30. Web容器/ EJB容器:JSF託管Bean?
必須在'請求',檢查它 – 2012-08-08 08:28:55