以下のコードでは、selectOneRadio でリスナーを使用して、URL にクエリ文字列を含むページにリダイレクトしています。
問題は、リダイレクトされたときに と の値newsTitle
がselectedNews
null になることです。どうしてこれなの?FacesContext を使用してリダイレクトを行っているためですか?
news.xhtml
<h:outputLabel for="title" value="Title" style="font-weight: bold;"/>
<p:inputText id="title" required="true" value="#{contentEditorBacking.newsTitle}" >
<p:ajax event="blur"/>
</p:inputText>
<h:outputLabel value="Site" style="font-weight: bold;" />
<p:selectOneRadio value="#{contentEditorBacking.selectedNews}" layout="pageDirection">
<f:selectItem itemLabel="Public" itemValue="Public" />
<f:selectItem itemLabel="Member" itemValue="Member" />
<p:ajax event="change" listener="#{contentEditorBacking.addNewsArticle}" update="path"/>
</p:selectOneRadio>
contentEditorBacking.java
@ManagedBean
@ViewScoped
public class ContentEditorBacking {
private String newsTitle = null;
private String selectedNews = null;
public String getNewsTitle() {
return newsTitle;
}
public void setNewsTitle(String newsTitle) {
this.newsTitle = newsTitle;
}
public String getSelectedNews() {
return selectedNews;
}
public void setSelectedNews(String selectedNews) {
this.selectedNews = selectedNews;
}
public void addNewsArticle() throws Exception {
String year = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)).length() < 2 ? "0"+Calendar.getInstance().get(Calendar.YEAR) : String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
String month = String.valueOf(Calendar.getInstance().get(Calendar.MONTH)).length() < 2 ? "0"+(Calendar.getInstance().get(Calendar.MONTH)+1) : String.valueOf(Calendar.getInstance().get(Calendar.MONTH));
String day = String.valueOf(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)).length() < 2 ? "0"+Calendar.getInstance().get(Calendar.DAY_OF_MONTH) : String.valueOf(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
String newsPath = null;
newsPath = "/" + selectedNews + "/News/" + year + "/" + month + "/" + day + "/" + newsTitle;
FacesContext.getCurrentInstance().getExternalContext().redirect("news.xhtml?path="+ newsPath);
}
}