CDIとJSF2を使用する場合HTTPリクエストパラメータをBeanにどのように注入できますか?CDIとJSF2による依存性注入要求パラメータ
答えて
ヒント:さらに読む前にhttp://showcase.omnifaces.org/components/paramをご覧ください。 今日、事実上の標準がどのように全世界が標準であるかを見ると、おそらく時代遅れです。私はおそらくこれを書いたことはありませんが、時にはこれがあれば
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というパラメータが検索されます。
通常の使用例では、必要なパラメータとまったく同じ名前のString変数を使用します。
生成する必要があるFacesContextを挿入することに注意してください。
class FacesContextProducer {
@Produces @RequestScoped FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
エンド用法:それはのFacesContextへのアクセスを必要として、これはサーブレットまたは類似のために動作しないことに
@Inject
@RequestParam
private String session_secret;
ノートのFacesContextプロデューサーは、次のようになります。そのような場合、@RequesScopedなどのBeanなどで注入をラップする必要があります。代わりにそのBeanを注入します。
- 1. 依存性注入
- 2. 依存性注入
- 3. 依存性注入
- 4. Zend Framework依存性注入対Symfony2依存性注入
- 5. 依存性注入問題
- 6. 角度依存性注入
- 7. Android Dagger2依存性注入