【问题标题】:JSF - Change the action for a h:commandButton (2.0)JSF - 更改 h:commandButton 的操作 (2.0)
【发布时间】:2011-04-17 23:45:12
【问题描述】:

我是 JSF 2.0 的新手。在上一个版本中,我知道如果我想更改有关“发送给客户端的内容”的规则,我只需要配置 faces-config.xml。

现在,在 2.0 版本上,如何管理 Action? 例如,如果我在 index.xhtml 上有这个

<h:commandButton id="submit" value="submit" action="response" />

我需要调用一个名为 response.html(而不是 xhtml)的页面或放置在 /folder/response.html 中的那个页面,还是其他什么?怎么办?我知道 JSF 2.0 在这些事情上非常灵活(href 链接的概念被打败了)。所以我想我可以用其他方法来解决这个问题,对吧?

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    action 可以指出两件事:

    1. 方法表达式action="#{bean.methodname}",其中方法如下所示:

      @ManagedBean
      @RequestScoped
      public class Bean {
          public String methodname() {
              // Do some business task here.
              return "response";
          }
      }
      

      在执行该方法后,该操作将有效地包含该方法的返回值,例如:action="response"

      您还可以使用通常的 Java 方式“动态”控制结果:

      public String methodname() {
          if (someCondition) {
              return "somepage";
          } else {
              return "anotherpage";
          }
      }
      

      根据条件结果,操作最终会像action="somepage"action="anotherpage"

    2. 与当前 XHTML 页面相同 文件夹中的另一个 XHTML 页面。您只需指定文件名:action="response"

    无论哪种方式,它都会转到由outcome + ".xhtml" 组成的XHTML 页面,其中outcome 是动作值(例如response.xhtmlsomepage.xhtmlanotherpage.xhtml)应该在同一个文件夹作为包含 h:commandButton 的 XHTML 文件。

    您无需为此在faces-config.xml 中配置任何内容。以前,在 JSF 1.x 时代,您需要为此定义 &lt;navigation-case&gt;

    另见:

    【讨论】:

    • 感谢您的提示。是的,在“1”的情况下,我在 bean 上调用了一个方法。但它只是返回一个变量。如果被调用的bean返回“某个值”或“另一个值”,如何说“返回页面somepage.xhtml?例如,如果bean返回“hello”它必须加载helloworld.xhtml,如果返回“mate”它必须加载byemate.xhtml.
    • 只需在操作方法中使用if-else 语句即可返回不同的String 结果。请参阅更新答案中的第二个代码块。
    • 所以也许我不明白 JSF 的过程。这将从bean“返回”一个字符串服务器端,它不会调用 somepage.xhtml 或 anotherpage.xhtml 对吗?否则,网络服务器将首先评估 bean,然后评估整个“动作”语句? :)
    • 会的。唯一的区别是返回值现在由 bean 方法控制。只需将somepage.xhtmlanotherpage.xhtml 放在同一个文件夹中,JSF 就会根据结果值导航到这些页面中的任何一个。
    • 嗯,好的。我总是忘记 JSF 的生命周期!我是从 php 方法学的,现在这很疯狂:) 谢谢人
    猜你喜欢
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多