为什么从操作方法返回空字符串不重新创建视图?
Why does returning empty string from action method not recreate view?
我有一个 JSF 页面,其表单包含多个文本字段 (p:inputtext) 和一个提交按钮。该页面由 ViewScoped 辅助 bean 支持。当提交按钮被点击时,一个动作方法被调用returns一个空字符串(“”)。
根据 this answer of BalusC,返回空字符串将刷新视图并重新创建 ViewScoped 支持 bean。
但是,当我提交填写好的表格时,重新加载的页面仍然保留我输入的所有文本。这怎么可能?自从重新创建支持 bean 和视图后,表单不应该为空吗?
在视图范围的 bean 中,只有当您的操作方法 return 为 null 时,bean 才不会再次初始化。
如果您希望操作方法返回提交的表单并重新加载 bean,您的方法必须 return 包含该表单的页面的名称。
@dmatob 是对的。当您有一个由 ViewScoped bean 支持的 JSF 页面时:
- 如果方法 return 为 null,则不会重新创建 bean(值保持不变)但会重新加载页面。
- 如果方法 return 是同一个页面或另一个页面,将重新创建 bean(它重置值)并重新加载页面。
几个小时前我也面临同样的问题:在方法成功执行时尝试重置值。因此,在四处阅读之后,我发现了一些终于解决的问题:
你必须使用 action 而不是 actionListener(差异 here)
<p:commandButton value="Save" action="#{backingBean.save()}" />
所以该方法必须return一个字符串
public String save(){
if(validations==true){
return "currentpage.xhtml?faces-redirect=true";
}
return null;
}
当一切正常时,它将重新创建 bean,刷新页面并重置值。否则方法 returns null 所以它将刷新页面但 bean。
[编辑]
如果该方法是 returning null 或空字符串,则不会重新创建 bean:不会触发 PostConstruct(初始化事件),这意味着值保持不变。在另一种情况下,如果它 return 是一个字符串(重定向到某个页面),则会调用 init 事件以便初始化值。
JSF 页面在以下两种情况下都会重新加载:当 return 是否输入 null/empty 字符串时。
希望对您有所帮助...让我知道 ;-)
我有一个 JSF 页面,其表单包含多个文本字段 (p:inputtext) 和一个提交按钮。该页面由 ViewScoped 辅助 bean 支持。当提交按钮被点击时,一个动作方法被调用returns一个空字符串(“”)。
根据 this answer of BalusC,返回空字符串将刷新视图并重新创建 ViewScoped 支持 bean。
但是,当我提交填写好的表格时,重新加载的页面仍然保留我输入的所有文本。这怎么可能?自从重新创建支持 bean 和视图后,表单不应该为空吗?
在视图范围的 bean 中,只有当您的操作方法 return 为 null 时,bean 才不会再次初始化。
如果您希望操作方法返回提交的表单并重新加载 bean,您的方法必须 return 包含该表单的页面的名称。
@dmatob 是对的。当您有一个由 ViewScoped bean 支持的 JSF 页面时:
- 如果方法 return 为 null,则不会重新创建 bean(值保持不变)但会重新加载页面。
- 如果方法 return 是同一个页面或另一个页面,将重新创建 bean(它重置值)并重新加载页面。
几个小时前我也面临同样的问题:在方法成功执行时尝试重置值。因此,在四处阅读之后,我发现了一些终于解决的问题:
你必须使用 action 而不是 actionListener(差异 here)
<p:commandButton value="Save" action="#{backingBean.save()}" />
所以该方法必须return一个字符串
public String save(){
if(validations==true){
return "currentpage.xhtml?faces-redirect=true";
}
return null;
}
当一切正常时,它将重新创建 bean,刷新页面并重置值。否则方法 returns null 所以它将刷新页面但 bean。
[编辑]
如果该方法是 returning null 或空字符串,则不会重新创建 bean:不会触发 PostConstruct(初始化事件),这意味着值保持不变。在另一种情况下,如果它 return 是一个字符串(重定向到某个页面),则会调用 init 事件以便初始化值。
JSF 页面在以下两种情况下都会重新加载:当 return 是否输入 null/empty 字符串时。
希望对您有所帮助...让我知道 ;-)