Java JSF VIEWSCOPE变量无法重定向到同一页面
使用下面的代码,我使用selectOneRadio上的侦听器重定向到url中带有查询字符串的页面 问题是,当我被重定向时,Java JSF VIEWSCOPE变量无法重定向到同一页面,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,使用下面的代码,我使用selectOneRadio上的侦听器重定向到url中带有查询字符串的页面 问题是,当我被重定向时,newsttitle和selectedNews的值为空。为什么会这样?是因为我正在使用FacesContext进行重定向吗 news.xhtml <h:outputLabel for="title" value="Title" style="font-weight: bold;"/> <p:inputText id="title" required="tru
newsttitle
和selectedNews
的值为空。为什么会这样?是因为我正在使用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);
}
}
@ManagedBean
@视域
公共类ContentEditorBacking{
私有字符串newsttitle=null;
私有字符串selectedNews=null;
公共字符串getNewsTitle(){
返回新闻标题;
}
公共无效setNewsTitle(字符串newsTitle){
this.newsttitle=新闻标题;
}
公共字符串getSelectedNews(){
返回所选新闻;
}
public void setSelectedNews(字符串selectedNews){
this.selectedNews=selectedNews;
}
public void addNewsArticle()引发异常{
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/u/u MONTH)).length()<2?“0”+Calendar.getInstance().get(Calendar.day/u MONTH):String.valueOf(Calendar.getInstance().get(Calendar.day/u MONTH));
字符串newsPath=null;
newsPath=“/”+所选新闻+“/News/”+年+“/”+月+“/”+日+“/”+新闻标题;
FacesContext.getCurrentInstance().getExternalContext().redirect(“news.xhtml?path=“+newsPath”);
}
}
重定向基本上指示webbrowser创建一个新的GET请求。这将创建一个新视图,从而也创建一个关联视图范围bean的新实例。只要您在(ajax)回发上返回null
或void
(视图范围即由隐藏的请求参数javax.faces.ViewState
标识/跟踪),视图范围bean就正常存在。这就是它的工作方式
使用
/
对新的GET请求执行初始化作业。如果有必要,您可以将命令链接设置为普通的GET链接,这样对SEO更友好(搜索机器人根本不为帖子表单编制索引)
另见:
?faces redirect=true
?您可以使用update=“@all”
更新整个页面,但是,如果不告诉浏览器在给定URL上发送新请求(通过重定向完成),则无法更改地址栏。?faces redirect=true
在封面下也做了同样的事情,它只是在可以返回字符串结果的action方法中使用时的一种方便。只要使用
,就可以了。