私は単に@RequestScoped
backing beanに関連付けられているページを持っています。私はこのページを他のページから取得します。このページでは、「プロジェクト」というパラメータを渡しました。だから、私が右ページに行くとき、私はcontextRoot/faces/jsf.xhtml?project=123
のようなURLを持っています。ポストバック全体で元のGETリクエストパラメータを保持
ビュー:
<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パラメータはブラウザのアドレスバーに表示されていても使用できなくなります。私はパラメータ をf:viewParam
とExternalContext
そしてさらにServletContext
から得る3つの方法を試みましたが、私はそれらのパラメータを得ることができません。
私は@SessionsScoped
から@RequestScoped
を変更したくないと私はCDI豆を使用していbeacuse私は、@ViewScoped
を使用することはできませんし、私はそれらをミックスする必要はありません。
ビーンのスコープの変更「要求」に「表示」から。 – KSHiTiJ
@kshitij:残念ながら、OPはJSFの代わりにCDIを使用してBeanを管理しています。したがって、JSF固有のビュー・スコープは機能しません。 OPはまた、質問の最後の文でそれを明示した。 – BalusC