JSF动作与结果属性

6

我是JSF的新手,正在尝试理解action和outcome属性之间的区别。这不是按钮和命令按钮之间的区别,而是在同一个按钮标签上outcome和action属性之间的区别。

例如,我可以有:

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

或者

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

我不确定何时使用哪个。另外,如果<value><#{bean.methodThatReturnsStringInNavigationRule}><字符串文字在导航规则>,是否有区别?

谢谢。


1
按钮通常用于导航,而命令按钮通常用于执行业务操作(并且必要时也可进行导航)。 - skuntsel
1
根据您的更新,没有一个JSF组件在同一标记中具有这两个属性。<h:button>根本不支持action属性。action属性仅在<h:commandButton>中受支持。 - BalusC
现在这个问题的标题更易于查找。 我认为不应再被视为重复。 - bjedrzejewski
2个回答

15
区别在于,虽然action定义了要执行的服务器方法,outcome则指定了一个视图ID,该ID将成为您页面的目标。根据您要实现的目标,必须使用JSF输入:
  • <h:button outcome="user-management"> 将您定位到用户管理页面。把它想象成一种链接。
  • <h:commandButton action="#{backingBean.goToUserManagement}" 如果您在操作方法中返回"user-management",则与outcome相同,但它允许您在服务器端执行一些逻辑。它必须嵌入到h:form标签中。

此外,<h:button outcome="user-management"><h:button outcome="#{backingBean.userManagementNavigationResult}">之间没有区别,只要您的服务器端getter方法返回值"user-management"即可。


4
<h:button>可以在<h:form>之外使用,而<h:commandButton>则不行。 - Luiggi Mendoza
另外,“动作”并不一定依赖于 bean 方法,但是,如果不是这种情况,为什么不使用 <h:link> 呢? - skuntsel
谢谢。那么关于结果的排列,#{backing-bean} 怎么样? - dev
它只是将输出值作为字符串打印出来。 - BalusC
h:button 渲染成 input type="submit"。 - Mark W

4
如果你看到 JSF 2.0 API,<h:button> 标签没有 action 属性。这是 JSF 2.0 中的新标签。你可以在 outcome 属性中直接声明导航的结果,不需要像 <h:commandButton> 那样调用一个 bean 返回结果。
但是,如果浏览器禁用了 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。他是论坛上无数人心目中的英雄:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接