1

Beanメソッドの処理中にオブジェクトをリクエストする方法を知っています。

@ManagedBean        
public class HomeAction {
    ....
    public String getHtmlFormattedCookiesInfo(){
        FacesContext facesCtx = FacesContext.getCurrentInstance();
        ExternalContext extCtx = facesCtx.getExternalContext();
        HttpServletRequest req = (HttpServletRequest) extCtx.getRequest();
        ....
        // now do something with the req object such as read cookie
        //    or pass req object to another another function 
        //    that knows nothing about JSF
        ....
        }
    }
}

しかし、Faces固有のコードをBeanオブジェクトに入れるのは好きではありません。

DIとfaces-config.xmlを使用してリクエストを渡す方法はありますか?

質問番号9337433は、リクエストオブジェクトにあるものを渡したいときに答え始めます。ただし、リクエストオブジェクト全体が必要です。

4

2 に答える 2

1

FacesContextによって利用可能なELスコープにあります#{facesContext}

したがって、マネージドBean自体もリクエストスコープである場合は、これで十分です。

@ManagedProperty("#{facesContext.externalContext.request}")
private HttpServletRequest request;

ただしjavax.servletJSFコードをインポートすることは、コードの臭いを示すことが多く、特定の機能要件もJSFの方法で解決できることを示しています。コメントによると、あなたはリクエストCookieの収集に興味を持っているようです。ExternalContextこのためには、クラスのサーブレットAPI固有ではないメソッドを使用する必要があります。完全な概要については、 javadocを参照してください。クッキーは、次の方法でも利用できますExternalContext#getRequestCookieMap()

Map<String, Object> cookies = externalContext.getRequestCookieMap();

これは#{cookie}ELでも利用できます(ここでも、マネージドBeanはリクエストスコープである必要があります):

@ManagedProperty("#{cookie.cookieName}")
private String cookieValue;

または、FacesJSFユーティリティライブラリOmniFacesのクラスを調べて、一般的な定型文を保存することもできます。

String cookieValue = Faces.getRequestCookie("cookieName");
于 2012-08-14T13:55:16.590 に答える
0

Bean がリクエスト スコープであると仮定すると、管理プロパティを使用して別のリクエスト スコープの値を挿入できます。例えば:

@ManagedBean
@RequestScoped
public class Alfa {
  @ManagedProperty("#{paramValues.foo}")
  private String[] foo;

  public String[] getFoo() {
    return foo;
  }

  public void setFoo(String[] foo) {
    this.foo = foo;
  }

// remainder elided

で指定することもできますfaces-config.xml。リクエスト スコープのアーティファクトをより広いスコープに挿入するには、一定レベルの indirectionを採用する必要があります。

于 2012-08-14T13:52:53.650 に答える