gpt4 book ai didi

java - JSF 在托管 bean 中获取当前操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:27 26 4
gpt4 key购买 nike

当用户单击任何commandButton 时,相应的操作将在托管bean 中调用。是否可以从 @PostConstruct 方法或事件监听器方法中获取此操作名称?

最佳答案

按钮的名称=值对本身可以作为 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 的私有(private)字段公共(public) API 绝不 可用。因此,除非您捕获反射和实现特定的 hack,否则故事到此结束。

要确定按下的按钮,最好的办法是像 JSF 本身一样手动检查请求参数映射。

根据具体的功能要求,问题中并不清楚,另一种可能是使用 actionListener<f:actionListener>在所有UICommand感兴趣的组件,或使用 <action-listener>faces-config.xml注册一个全局的。这将在 真正的 action 之前被调用。被调用。

关于java - JSF 在托管 bean 中获取当前操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11860550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com