【问题标题】:Rendering HTML5 buttons (button, reset and submit) in JSF2在 JSF2 中呈现 HTML5 按钮(按钮、重置和提交)
【发布时间】:2013-07-24 19:16:43
【问题描述】:

您可能知道,您可以通过 2 种方法在 HTML5 中呈现按钮:

  • 使用 void 元素 <input type="button" />
  • 如果您需要内容,请使用 <button></button> 元素(它不是 void 元素)。

在 JSF2 中,有 2 种方式来生成按钮;使用UICommandUIOutcomeTarget 组件。我了解这两个组件的用途,我的问题是 2 个 HTML5 按钮类型的最佳组件是什么,是否应该在 JSF2 中创建这些 HTML5 组件?

到目前为止,最好的方面是为每个 HTML5 元素创建一个 UICommandUIOutcomeTarget

【问题讨论】:

    标签: java jsf-2


    【解决方案1】:

    UICommand 组件应该用于像 <h:commandButton type="submit"> 这样的 POST 按钮,UIOutcomeTarget 组件应该用于像 <h:button> 这样的 GET 按钮。 void 按钮在 JSF 中由 <h:commandButton type="button"> 表示,本质上是 UICommand,但它没有任何作用。

    JSF2 没有任何生成<button> 的组件。提到的组件会生成一个<input>。 PrimeFaces 的<p:commandButton><p:button> 但是会生成一个完整的<button>(唯一的原因是它可以更轻松地通过 CSS 控制外观)。

    如果您打算创建一个生成<button> 的自定义组件,并希望在UICommandUIOutcomeTarget 之间做出决定,那么您应该基于所需的按钮的HTML 表示最终触发POST 还是触发获取请求。如果您的按钮应该同时支持两者,请选择UICommand

    另见:


    与具体问题无关,这些按钮都不是 HTML5 特定的。它们已经存在于以前的 HTML 版本中。

    【讨论】:

    • 那么我的第一个问题是,UIForm 组件必须始终只允许 HTTP POST 还是允许 HTTP GET?
    • 是的。 JSF 主要被设计为基于回发表单的应用程序的 MVC 框架。 <h:form> 不支持任何其他方法。如果你想要 GET,只需使用纯 HTML <form>。另请参阅stackoverflow.com/questions/6377798/… 上我的答案底部的示例
    • 感谢@Balusc,原因是submit button(对于空元素和非空元素)。您可以看到元素formmethod 属性是允许的,因此允许将表单设置为getpost。您的建议是 UICommand 将这两个组件放在一起?
    • 这些新属性又确实是特定于 HTML5 的。对于 JSF 来说,这无关紧要。它们和其他所有属性一样:将其打印为纯字符串。是的,如果你想支持 JSF POST,UICommand 是你唯一的选择。或者,您也可以单独实现ActionSource 接口,但是您必须编写很多额外的样板文件,这些样板文件已经在UICommand 中完成。
    • 感谢 BalusC。我正忙于编写符合 HTML5 元素及其各自标签的 UIComponents 和渲染器(并在此过程中学习 JSF)。这些乏味的标签让我很难决定是否应该包含其中一些新属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2016-10-10
    相关资源
    最近更新 更多