@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
を取得できません。ExternalContext
ServletContext
@RequestScoped
に変更したくなく、@SessionsScoped
使用できません@ViewScoped
。CDI Bean を使用していて、それらを混在させたくないためです。