當使用CDI和JSF2 HTTP請求參數如何被注入到一個bean中?CDI和JSF2依賴注入請求參數
7
A
回答
18
建議:在閱讀任何進一步看看http://showcase.omnifaces.org/components/param。 你自己做的事情可能已經過時了,看看今天如何omnifaces是一個事實上的標準。我可能沒有寫這個,如果全部在這個時候有這個
CDI並沒有解決像注入一個請求參數的專門問題。這應該通過擴展來解決。
這已經由焊料提供。 http://docs.jboss.org/seam/3/solder/latest/reference/en-US/html/injectablerefs.html
它可能會包含在Deltaspike 0.4孵化或類似的。
這就是說所需的代碼實現起來相當簡單。下面的例子:
註釋使用的注入點(例如private String myParam;
)
import javax.enterprise.util.Nonbinding;
import javax.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER })
public @interface RequestParam {
@Nonbinding
public String value() default "";
}
現在我們有註解,但是我們不能只要求容器依賴注入一個@RequestParam
- 我們顯然需要一個實現。
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
public class RequestParamProducer implements Serializable {
private static final long serialVersionUID = -4260202951977249652L;
@Inject
FacesContext facesContext;
// Producer for @RequestParam
@Produces
@RequestParam
String getRequestParameter(InjectionPoint ip) {
String name = ip.getAnnotated().getAnnotation(RequestParam.class)
.value();
if ("".equals(name))
name = ip.getMember().getName();
return facesContext.getExternalContext().getRequestParameterMap()
.get(name);
}
}
那麼它是如何工作的?很簡單,它首先檢查你是否確定了你想要的參數,如@Requestparam("longAndTerribleFieldNameBestToSpecify")
;
如果你沒有它將使用fieldName。所以如果你註釋了一個名爲setMyInstance的setter,它會查找一個名爲setMyInstance的參數。
正常使用情況下,應該有一個字符串變量,其命名與您想要的參數完全相同。
請注意,我們注入FacesContext,也必須生成。一個FacesContext製片人看起來是這樣的:
class FacesContextProducer {
@Produces @RequestScoped FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
末用法:
@Inject
@RequestParam
private String session_secret;
請注意,這不會對Servlet的工作或類似的,因爲它需要訪問FacesContext中。在這些情況下,需要使用例如@RequesScoped的bean來封裝注入。您注入該豆代替。
相關問題
- 1. CDI依賴注入問題
- 2. Angularjs依賴注入參數
- 3. AutoMapper依賴注入參數
- 4. 在Android上依賴注入與Weld/CDI
- 5. ASP.NET 5依賴注入,注入參數
- 6. 依賴注入和傳遞參數
- 7. Symfony2的:依賴注入的請求依賴
- 8. 使用Ninject注入依賴於WCF和MVC請求參數的特定EF DbContext
- 9. 依賴注入 - 參數的數量
- 10. 依賴注入和依賴不使用
- 11. JSF2託管Bean參考問題:CDI注入?
- 12. 依賴注入動態參數
- 13. 依賴注入容器,類參數
- 14. 依賴注入可選參數
- 15. PHP - Laravel依賴注入:傳遞參數進行依賴構造
- 16. JSF2 CommandButton動作請求參數
- 17. 依賴注入
- 18. 依賴注入
- 19. 依賴注入
- 20. 依賴注入
- 21. 依賴注入
- 22. 依賴注入
- 23. Grails @DelegateAsync和依賴注入
- 24. .NET ClaimsAuthenticationManager和依賴注入
- 25. 依賴注入和JavaScriptConverter.Deserialize
- 26. 依賴注入和測試
- 27. CA2000和依賴注入
- 28. WCF和依賴注入
- 29. 依賴注入和工廠
- 30. IoC和依賴注入