当用户单击任何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获取值作为参数
- 5. 在运行时获取JSF中所有托管Bean的列表
- 6. 在JSF中从托管bean获取资源文件的路径
- 7. JSF - 托管bean的变量?
- 8. 属性以JSF托管bean
- 9. JSF托管bean问题
- 10. JSF托管bean EJB注入
- 11. 如何从jersey.servlet.ServletContainer托管bean获取Spring托管bean?
- 12. JSF 2 - 从托管bean获取PhaseListener的实例
- 13. JSF 1.2托管bean如何获取getter值
- 14. 如何获取JSF托管bean的包路径?
- 15. 在JSF中,如何使用ELResolver获得托管bean的属性
- 16. 无法创建托管bean UserBean - JSF
- 17. STS:使用JSF,托管bean和方面
- 18. 使用jsp:usebean和jsf托管的bean?
- 19. Web容器/ EJB容器:JSF托管Bean?
- 20. JSF 2本地化(托管bean)
- 21. 从javascript运行jsf托管bean方法
- 22. JSF - 托管bean的两个实例
- 23. 托管bean作为托管属性
- 24. bean和jsf验证注释inisde托管bean vs实体bean
- 25. JSF获取当前页面
- 26. Glassfish中使用JSF托管bean的spring bean的问题
- 27. 从托管bean获取nsf资源
- 28. 如何在富文件中调用托管bean操作:popupPanel
- 29. 在PhaseListener中记录调用的托管bean操作
- 30. 如何从支持bean中获取托管bean名称?
必须在'请求',检查它 – 2012-08-08 08:28:55