h:button 和 h:commandButton 之间的区别

2024-04-17

在 JSF 2 中,有什么区别h:button and h:commandButton ?


<h:button>

The <h:button> http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/h/button.html生成一个 HTML<input type="button">。生成的元素使用 JavaScript 导航到属性给定的页面outcome,使用 HTTP GET 请求。

E.g.

<h:button value="GET button" outcome="otherpage" />

将生成

<input type="button" onclick="window.location.href='/contextpath/otherpage.xhtml'; return false;" value="GET button" />

尽管这最终会导致浏览器地址栏中的(可添加书签的)URL 发生变化,但这并不利于 SEO。搜索机器人不会跟踪onclick。你最好使用一个<h:outputLink> or <h:link>SEO 对于给定的 URL 是否很重要。如果需要,您可以在生成的 HTML 上添加一些 CSS<a>元素使其看起来像一个按钮。

请注意,虽然您可以将引用方法的 EL 表达式放入outcome属性如下,

<h:button value="GET button" outcome="#{bean.getOutcome()}" />

it will not单击按钮时将被调用。相反,当呈现包含按钮的页面时,它已经被调用,其唯一目的是获取要嵌入到生成的导航结果中。onclick代码。如果您曾经尝试使用操作方法语法,如下所示outcome="#{bean.action}",通过面对一个问题,你已经被这个错误/误解所暗示javax.el.E​​LException:在 com.example.Bean 类中找不到属性 actionMethod https://stackoverflow.com/questions/7950628/javax-el-elexception-could-not-find-property-actionmethod-in-class-com-example.

如果您打算通过 POST 请求调用方法,请使用<h:commandButton>相反,请参见下文。或者,如果您打算通过 GET 请求调用方法,请前往在页面加载时调用 JSF 托管 Bean 操作 https://stackoverflow.com/questions/2451154/invoke-jsf-managed-bean-action-on-page-load或者如果您还有 GET 请求参数<f:param>, 如何在页面加载时处理支持 bean 中的 GET 查询字符串 URL 参数? https://stackoverflow.com/questions/10724428/how-do-i-process-get-query-string-url-parameters-in-backing-bean-on-page-load/


<h:commandButton>

The <h:commandButton> http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/h/commandButton.html生成一个 HTML<input type="submit">默认情况下提交父级的按钮<h:form>使用 HTTP POST 方法并调用附加到的操作action, actionListener and/or <f:ajax listener>,如果有的话。这<h:form>是必须的。

E.g.

<h:form id="form">
    <h:commandButton id="button" value="POST button" action="otherpage" />
</h:form>

将生成

<form id="form" name="form" method="post" action="/contextpath/currentpage.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="form" value="form" />
    <input type="submit" name="form:button" value="POST button" />
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="...." autocomplete="off" />
</form>

请注意,它因此提交到当前页面(表单操作 URL 将显示在浏览器地址栏中)。之后就会forward到目标页面,无需更改浏览器地址栏中的 URL。你可以添加?faces-redirect=true参数到结果值以在 POST 后触发重定向(根据重定向后获取模式 http://en.wikipedia.org/wiki/Post/Redirect/Get) 使目标 URL 成为可添加书签的。

The <h:commandButton>通常专门用于提交 POST 表单,而不是执行页面到页面的导航。通常情况下,action指向一些业务操作,例如将表单数据保存在DB中,它返回一个String结果。

<h:commandButton ... action="#{bean.save}" />

with

public String save() {
    // ...
    return "otherpage";
}

返回null or void将会带您回到相同的视图。也返回一个空字符串,但它会重新创建任何视图作用域 bean。如今,随着现代 JSF2 和<f:ajax>,通常情况下,动作只是返回到相同的视图(因此,null or void) 其中结果由 ajax 有条件地呈现。

public void save() {
    // ...
}

也可以看看:

  • 如何在 JSF 中导航?如何使 URL 反映当前页面(而不是上一页) https://stackoverflow.com/questions/15521451/how-to-navigate-in-jsf-how-to-make-url-reflect-current-page-and-not-previous-o
  • 什么时候应该使用 h:outputLink 而不是 h:commandLink? https://stackoverflow.com/questions/4317684/when-should-i-use-houtputlink-instead-of-hcommandlink
  • 动作和动作监听器之间的区别 https://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

h:button 和 h:commandButton 之间的区别 的相关文章

  • FontAwesome 与 PrimeFaces

    我一直渴望在 Primefaces 中包含 FontAwesome 图标 最后 Optimus 昨天发布了这个伟大的新图标 gt http blog primefaces org p 3004 comment 5422 http blog
  • Primefaces 进度条未更新?

    我的进度条没有更新 为什么 控制器方法被按其应有的方式调用 并且进程变量被正确递增 XHTML
  • 将 JavaFX 按钮放置在特定位置

    我的问题是如何将 javafx 按钮放置在特定位置 我一直尝试执行这个简单的代码 结果是按钮仅位于屏幕中心 而不是我想要的位置 我正在使用 StackPane Code Button button new Button button set
  • JSF - 在 ajax 调用上传递参数 - 这段代码有什么问题?

    当我进行 ajax 调用时 我需要将参数传递给 bean 我的豆子是这样的 ManagedBean RequestScoped public class Selector ManagedProperty value param page p
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 无法从自生成线程访问 FacesContext.getCurrentInstance()

    无法在自生成线程中获取 FacesContext getCurrentInstance 需要根据后端进程动态更新组件 通过创建一个线程来监视进程并回调组件更新以及 p poll 来实现相同的效果 但是 似乎 FacesContext get
  • 如何在注销并重新登录后保存按钮状态?

    我有一个保存按钮 点击该按钮后 会将标签 quoteLabel 中的文本保存到 Firebase 中的用户帐户 然后该按钮将隐藏 并且取消保存按钮将不再隐藏 以便用户可以根据需要取消保存 这两个按钮都可以根据需要发布和删除数据 但是 如果我
  • 我应该在 JSF ManagedBean 中的哪里打开/关闭 JMS 连接?

    在使用 JSF 2 和 Ajax 的简单演示 Web 应用程序中 ManagedBean 中有一个从 JMS 队列接收消息的方法 ManagedBean public class Bean Resource mappedName jms H
  • f:selectOneMenu 带参数

    我有一组 用户 组和一个显示这些组 和用户 的表格 每个组表头包含一个f selectOneMenu它允许设置一个组范围的值 在本示例中 将其设为 int 值 0 5 10 15 20 的列表 下面是事情的简短版本 Pojos public
  • 是否可以包含 JSF 中一个文件夹中的所有 javascript 文件?

    我正在使用 JSF 2 0 并且正在寻找一种方法来包含页面上给定文件夹中的所有 javascript 即执行类似的操作
  • 网页过滤器破坏了 PrimeFaces 移动视图

    在我使用 PrimeFaces 3 4 2 的 JSF2 1 Web 应用程序中 我添加了一个新网页 其中仅包含一个视图renderKitId PRIMEFACES MOBILE PFM 0 9 3 这个想法是过滤器将来自移动设备的请求重定
  • JSF,覆盖 HTTP 标头

    我强烈需要重写 JSF 2 0内容类型标头 默认是 Content Type application xhtml xml charset UTF 8 但是我需要 Content Type text html charset UTF 8 Th
  • 可以访问 JSF/facelets 中的请求参数的过滤器会导致错误的编码

    我面临以下问题 错误 对于用例 我添加了一个 log4j 过滤器 因为它可以提供很好的日志记录 请参阅here https stackoverflow com questions 5901347 a unique id per user s
  • DataTable - 延迟加载 Primefaces 显示错误

    我将 JSF2 0 与 PrimeFaces 3 1 和 Spring 3 1 一起用于业务逻辑 我试图使用 DataTable 延迟加载 但它给了我以下错误 请帮忙 发生错误 by zero Stack Trace java lang A
  • 从 web 应用程序更新 url 栏以表示当前状态

    我基本上想做杰森要求的事情here https stackoverflow com questions 1457 modify address bar url in ajax app to match current state 用一句话来
  • 如何在 JSF 中使用 cookie

    我有一个基于 JSF 1 2 会话范围 Bean 的 JSF 表单 我有一个 重置 按钮 它会使会话无效 我尝试使用 cookie 来记住会话之间的会话号 不是 JSF 会话 而是我的私人会话号 但失败了 我的问题 初始化 检索和存储 co
  • 使会话 Spring Security 无效

    我的网络应用程序使用 spring security 在登录时对用户进行身份验证 我还具有并发控制 以避免用户在不同的计算机上登录两次 这工作正常 但我的问题是 如果用户登录计算机 则关闭浏览器 然后他重新打开 Web 应用程序 尝试再次登
  • 如何以编程方式 ajax 更新支持 bean 中的特定组件

    有没有办法通过 ajax 更新特定组件 例如
  • 将 UIActivityIndi​​catorView 添加到 UIBarButton

    如何将 UIActivityIndi catorView 微调器圆添加到 UIBarButton 中 以便当用户点击导航栏上的这些按钮之一时 他们会在加载时看到一个微调器 如果您尝试在导航栏按钮中显示活动轮 例如 您的导航栏上可能有一个刷新
  • 动态向 Fragment 添加按钮

    我一直在尝试动态地将按钮添加到我的片段中 但我尝试过的所有方法都不起作用 这些是我尝试过的一些方法 1 public View onCreateView LayoutInflater inflater Nullable ViewGroup

随机推荐