[英]@javax.faces.bean.ManagedProperty in CDI @Named bean returns null
[英]@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.