@RequestScopedバッキングビーンが関連付けられているページがあります。パラメータ「プロジェクト」を渡した他のページからこのページにアクセスします。したがって、正しいページにアクセスすると、 のような URL が表示されますcontextRoot/faces/jsf.xhtml?project=123。
意見:
<f:metadata>
    <f:viewParam name="project" value="#{entityBean.projectId}" />
</f:metadata>       
...
<p:commandButton value="#{msg['button.add']}"
    actionListener="#{entityBean.addNewEntity((entityName),(entityDescritpion))}"
    ajax="true" update=":projectDetailForm"/>
バッキング Bean:
@Named("entityBean")
@RequestScoped
public class EntityBean implements Serializable{
    private String projectId;
    @PostConstruct
    public void init() {
        params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            System.out.println(entry.getKey() + " / " + entry.getValue());
        }
        if (params.get("project") != null) {
            projectId = params.get("project");
        } else {
            HttpServletRequest request =
                (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
            String projectId = request.getParameter("project");
        }
    }
    //projectId getter and setter
    //public void addNewEntity(String name, String desc) {}
}
初めてページを開いたときは、すべて正常に動作します。GET パラメータは正常に処理されました。ただし、Bean はリクエスト スコープであるため、リクエストの最後で破棄され、後続のポストバックで再作成されます。これらのポストバック中は、ブラウザーのアドレス バーに表示されていても、GET パラメーターは使用できなくなります。パラメータを取得する3つの方法を試しましたが、それらのパラメータf:viewParamを取得できません。ExternalContextServletContext
@RequestScopedに変更したくなく、@SessionsScoped使用できません@ViewScoped。CDI Bean を使用していて、それらを混在させたくないためです。