【问题标题】:JSF Action vs Outcome AttributeJSF 动作与结果属性
【发布时间】:2013-02-22 23:54:06
【问题描述】:

我是 JSF 的新手,我想了解操作与结果属性之间的区别是什么?这不是按钮和命令按钮之间的区别,而是 same 按钮标签上的结果与操作属性之间的区别。

例如,我可以:

<h:button value="Go" outcome="<value>" />

<h:button value="Go" action="<value>" />

我不确定何时使用哪个。另外,&lt;value&gt;&lt;#{bean.methodThatReturnsStringInNavigationRule}&gt; 还是 &lt;string literal in navigation rule&gt; 有区别吗?

谢谢。

【问题讨论】:

  • 按钮通常用于导航,而命令按钮通常用于执行业务操作(以及,如有必要,导航)。
  • 根据您的更新,没有一个 JSF 组件在同一个标​​签中同时具有这两个属性。 &lt;h:button&gt; 根本不支持 action 属性。 action 属性仅在 &lt;h:commandButton&gt; 中受支持。
  • 这个问题的标题现在更容易找到。我认为它不应再被视为重复。

标签: jsf jsf-2


【解决方案1】:

不同之处在于,action 定义了要执行的服务器方法,而 outcome 指定了一个 view-id,它将成为您页面的目标。您必须根据要实现的目标使用 JSF 输入:

  • &lt;h:button outcome="user-management"&gt; 将您定向到用户管理页面。把它想象成一种链接。
  • &lt;h:commandButton action="#{backingBean.goToUserManagement}" 如果您在操作方法中返回 "user-management",与 结果 的作用相同,但它允许您在服务器端执行一些逻辑。它必须嵌入到h:form 标记中。

&lt;h:button outcome="user-management"&gt;&lt;h:button outcome="#{backingBean.userManagementNavigationResult}"&gt; 之间也没有区别,只要您的服务器端 getter 方法返回“用户管理”值。

【讨论】:

  • &lt;h:button&gt; 可以在&lt;h:form&gt; 之外使用,而&lt;h:commandButton&gt; 不能。
  • 另外,action 并不必然依赖 bean 方法,但是,当然,如果不是这样,那么为什么不使用 @ 987654329@.
  • 谢谢。结果=#{backing-bean}的排列呢?
  • 它只是将结果值打印为字符串。
  • h:button 呈现为输入 type="submit"
【解决方案2】:

如果您看到 JSF 2.0 API,则 &lt;h:button&gt; 标记没有 action 属性。 &lt;h:button&gt; 是 JSF 2.0 中的新标签。您可以直接在outcome 属性中声明导航结果,无需调用bean 来返回类似&lt;h:commandButton&gt; 的结果。

但是,如果浏览器禁用了 JavaScript,导航将失败,因为“h:button”标签会生成一个“onclick”事件来通过window.location.href 处理导航。

<h:button value="buton" outcome="login" />          

//HTML 输出

<input type="button" 
       onclick="window.location.href='/ContextRoot/faces/login.xhtml; return false;" 
       value="buton" />

来源:mkyong。我最喜欢的网站,您可以在其中找到不错的示例。

JSF 的优秀博客:BalusC。这个论坛上这么多人的英雄:)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多