gpt4 book ai didi

java - JSF ViewScoped 变量无法重定向到同一页面

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:26 26 4
gpt4 key购买 nike

使用下面的代码,我在 selectOneRadio 上使用监听器重定向到 url 中包含查询字符串的页面。

问题是,当我被重定向时,newsTitleselectedNews 的值为空。为什么是这样?是因为我正在使用 FacesContext 进行重定向吗?

新闻.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);
}

}

最佳答案

重定向基本上是指示网络浏览器创建一个新的 GET 请求。这将创建一个新 View ,因此也会创建一个关联的 View 作用域 bean 的新实例。只要您返回, View 范围的 bean 通常会存在 nullvoid在(ajax)回传上( View 范围即由隐藏的请求参数 javax.faces.ViewState 识别/跟踪)。这就是指定的工作方式。

使用 <f:viewParam>/<f:event type="preRenderView">对新的 GET 请求执行初始化作业。如有必要,您可以将命令链接设为普通 GET 链接,这样它对 SEO 更友好(搜索机器人根本不会索引 POST 表单)。

另见:

关于java - JSF ViewScoped 变量无法重定向到同一页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com