簡體   English   中英

@ManagedProperty,請求參數未在@Named bean中設置

[英]@ManagedProperty with request parameter not set in a @Named bean

我有一個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

URL為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");

但是,我寧願使用注射劑。

特定於JSF的@ManagedProperty注釋僅適用於JSF托管bean,而不適用於CDI托管bean。 換句話說,它僅適用於使用JSF特定的@ManagedBean批注進行注釋的類,而不適用於使用CDI特定的@Named批注進行批注的類。

CDI沒有提供注釋,專門注入HTTP請求參數。 JSF實用程序庫OmniFaces提供@Param注釋,用於在CDI托管bean中注入HTTP請求參數。

@Inject @Param
private String key;

@Inject @Param
private Long id;

或者,在視圖中使用<f:viewParam>標記。

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

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM