- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
使用下面的代码,我在 selectOneRadio 上使用监听器重定向到 url 中包含查询字符串的页面。
问题是,当我被重定向时,newsTitle
和 selectedNews
的值为空。为什么是这样?是因为我正在使用 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 通常会存在 null
或 void
在(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/
我们正在将我们的项目迁移到针对 JBoss Wildfly 的 Java EE 7。 我们有几十个 @ManagedBean @javax.faces.bean.ViewScoped (旧的非 CDI
引自此 nice article , The new view scope should solve exactly those issues. A @ViewScoped bean will liv
我已经使用 JSF 很多年了,在下一个项目中,我们的目标是使 Web 层尽可能无状态。我正在探索的一种可能性是删除 @ViewScoped bean 类支持@RequestScoped (根据需要加上
这个问题在这里已经有了答案: JSF 2.1 ViewScopedBean @PreDestroy method is not called (2 个回答) 2年前关闭。 我有一个 @ViewScop
我有一个按钮,点击那个按钮我有客户端代码来设置 viewScope 值: var val = 'TEST_VALUE'; "#{javascript: viewScope.testVal =
我正在使用 JSF 构建一个单页应用程序,如下所示: 左侧的菜单是动态生成的,单击其中一个子菜单会创建一个选项卡,我在其中显示 中的内容。 . 菜单和选项卡代码:
在应用程序中,我需要知道 viewScope 变量是否已初始化。创建 viewScope 变量时,该值可能为 null。所以 viewScope.isEmpty("SomeName") 并没有告诉我它
我有一个按钮,点击那个按钮我有客户端代码来设置 viewScope 值: var val = 'TEST_VALUE'; "#{javascript: viewScope.testVal =
我正在使用带有多个和 fileUploadListener 方法的 primefaces fileUpload。每次上传的每个文件都会调用监听器,我想将每个文件存储在 arrayList 中,并在上传
如果我们没有相关页面所需的信息,我在从 View 作用域 bean 进行重定向时遇到问题。 @PostContruct 中的日志条目在与尝试呈现自身而不是遵循我的重定向的 View 相关的 NPE 之
此代码总是抛出 ViewExpiredException @ManagedBean(name = "test") @ViewScoped public class test implements Se
我要将一个参数从一个页面 (Facelet) 传递到范围为 View 范围的托管 Bean。 我试着这样做: import javax.faces.bean.ManagedBean; import j
我正在使用 JSF 2.0 和 Primefaces 3.4.2,我有一个使用延迟加载填充的数据表。 当我查看 managedbean 的范围时,数据表 selectedRow 给出空指针异常。如果我
使用下面的代码,我在 selectOneRadio 上使用监听器重定向到 url 中包含查询字符串的页面。 问题是,当我被重定向时,newsTitle 和 selectedNews 的值为空。为什么是
我已经看到有关调用 bean 构造函数和 ViewScope 的其他问题,但我仍然遇到困难。我看到的问题涉及我的应用程序中的两个特定页面。第一个是数据表(现在它填充了随机生成的数据,但最终会调用数据库
我想知道在两个 ViewScoped bean 之间传递数据(对象)的最佳实践是什么。 由于出色解释的问题,它们需要在 View 范围内here (简而言之:在这两个 View 中,我都在 h:dat
我的 h:commandButton "Login"有问题:当我使用 @ViewScoped 并按下此按钮时,会出现 ViewExpiredException,但是当我使用 @SessionScope
这个问题在这里已经有了答案: @ViewScoped calls @PostConstruct on every postback request (1 个回答) 5年前关闭。 我在 JSF 2.2.
在 Spring 3 和 JSF 2.0 中,当我们想要使用 JSF View 范围时,我们必须引入自定义 ViewScope 实现并指示 Spring 通过 CustomScopeConfigure
我在 jsf facelet 上有一个日历、编辑器、fileUpload 和一个 dataTable primefaces 控件。 代码如下, #{lbl.SSTitle}
我是一名优秀的程序员,十分优秀!