【问题标题】:How can I navigate to another page in managed bean?如何导航到托管 bean 中的另一个页面?
【发布时间】:2013-07-13 16:13:02
【问题描述】:

我正在尝试使用命令按钮在我的托管 bean 中转发一个页面:

<h:commandButton action="#{bean.action}" value="Go to another page" />

下面一行:

public void action() throws IOException {
    FacesContext.getCurrentInstance().getExternalContext().redirect("another.xhtml");
}

重定向页面,而不是转发。我已经看到了与此类似的问题并尝试了给定的解决方案:

public void action() throws IOException {
    FacesContext.getCurrentInstance().getExternalContext().dispatch("another.xhtml");
}

但我收到以下错误:

Index: 0, Size: 0

那么如何从托管 bean 转发到页面?

【问题讨论】:

  • 你能发布异常堆栈跟踪吗?
  • @erencan 我想我解决了,谢谢

标签: jsf redirect navigation forward


【解决方案1】:

只需将其作为操作方法返回值返回即可。

public String action() {
    return "another.xhtml";
}

如果您除了导航之外没有做任何其他事情,那么您也可以直接将字符串结果放在action 属性中。

<h:commandButton action="another.xhtml" value="Go to another page" />

然而,这又是一个相当糟糕的做法。您不应该为普通的页面到页面导航执行 POST 请求。只需使用一个简单的按钮或链接:

<h:button outcome="another.xhtml" value="Go to another page" />

另见:

【讨论】:

  • 非常感谢,我想我不知道按钮和命令按钮之间的区别。还有一个问题,让我们说两个页面我使用相同的托管 bean,并且在 page1 我有一个文本框,我填充它并按下按钮(不是命令按钮)setter 和 getter 工作并且一些变量绑定到值那个盒子。然后 page1 被导航到 text2。您说简单按钮不执行发布请求,所以在 page2 中我可以拥有绑定到 page1 中文本框值的那个变量的值吗?还是我必须将其作为参数传递给 page2?
  • 取决于具体的功能需求。为什么需要在不同的视图中显示 POST 请求的结果?你不能通过例如有条件地在同一视图中显示结果吗? rendered="#{not empty bean.results}"?另请参阅第二个“另请参阅”链接以获取建议。
猜你喜欢
  • 2015-04-23
  • 2021-09-20
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多