gpt4 book ai didi

jsf - @ManagedProperty 请求参数未在 @Named bean 中设置

转载 作者:行者123 更新时间:2023-12-04 14:26:55 26 4
gpt4 key购买 nike

我有一个 CDI 托管 bean,我想将请求参数设置为托管属性:

import javax.inject.Named;
import javax.enterprise.context.RequestScoped;

@Named
@RequestScoped
public class ActivationBean implements Serializable {

@ManagedProperty(value="#{param.key}")
private String key;

@ManagedProperty(value="#{param.id}")
private Long id;

// Getters+setters

网址是 domain/activate.jsf?key=98664defdb2a4f46a527043c451c3fcd&id=5 , 但是属性从未设置并保持 null .

这是如何引起的,我该如何解决?

我知道我可以从 ExternalContext 手动获取它们。如下:
Long id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"), 10);
String key = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("key");

但是,我宁愿使用注入(inject)。

最佳答案

JSF 特有的 @ManagedProperty 注释仅适用于 JSF 托管 bean,不适用于 CDI 托管 bean。换句话说,它只适用于使用 JSF 特定的 @ManagedBean 注释的类。注释,不在使用 CDI 特定 @Named 注释的类中注解。

CDI 不提供开箱即用的注释来专门注入(inject) HTTP 请求参数。 JSF 实用程序库 OmniFaces提供 @Param annotation出于在 CDI 托管 bean 中注入(inject) HTTP 请求参数的目的。

@Inject @Param
private String key;

@Inject @Param
private Long id;

或者,使用 <f:viewParam> View 中的标记。

<f:metadata>
<f:viewParam name="key" value="#{bean.key}" />
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

也可以看看
  • ViewParam vs @ManagedProperty(value = "#{param.id}")
  • How do I process GET query string URL parameters in backing bean on page load?
  • 关于jsf - @ManagedProperty 请求参数未在 @Named bean 中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28780051/

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