【问题标题】:PrimeFaces Layout and h:formPrimeFaces 布局和 h:form
【发布时间】:2018-01-09 14:14:26
【问题描述】:

Primefaces 文档指出以下代码将无效,因为每个 layoutUnit 都需要自己的表单:

        <p:layout fullPage="true">
        <h:form> 
            <p:layoutUnit position="north">
                <p:inputText value="#{testBean.input1}" />
            </p:layoutUnit>
            <p:layoutUnit position="center">
                <p:inputText value="#{testBean.input2}" />
                <p:commandButton value="save" action="#{testBean.save}" />
            </p:layoutUnit>
            <p:layoutUnit position="south">
                <p:inputText value="#{testBean.input3}" />
            </p:layoutUnit>
        </h:form> 
    </p:layout>

但是,当我将 p:layout 嵌套在表单中时,代码可以正常工作:

    <h:form>
        <p:layout fullPage="true">
                <p:layoutUnit position="north">
                    <p:inputText value="#{testBean.input1}" />
                </p:layoutUnit>
                <p:layoutUnit position="center">
                    <p:inputText value="#{testBean.input2}" />
                    <p:commandButton value="save" action="#{testBean.save}" />
                </p:layoutUnit>
                <p:layoutUnit position="south">
                    <p:inputText value="#{testBean.input3}" />
                </p:layoutUnit>
        </p:layout>
    </h:form>

这种行为的解释是什么?我在 p:layout 之外只有一个表单标签的方法会在某个时间点引起问题吗?

【问题讨论】:

  • 您能指出您的第一段在 PrimeFaces 中提到的位置吗?
  • 在 Primeface 文档中(primefaces.org/docs/guide/primefaces_user_guide_6_1.pdf,第 309 页)。
  • 你可以“接受”好的答案!
  • 哦,我完全忘记了。现在,它被接受了!再次感谢你的帮助!你太棒了!

标签: html jsf primefaces jsf-2


【解决方案1】:

PrimeFaces 文档确实在 Page 309 of the 6.1 documentation 上声明

使用表单和整页布局时,避免使用包含 layoutunits 的表单,因为生成的 dom 可能不一样。所以以下是 无效

他们引用了您的第一个示例。它在技术上不是无效的,但是由于布局组件呈现浏览器中所需的 html 的方式(并且可能客户端进行 dom 操作)以获得良好的全页体验,它可能(将?我自己从未尝试过)导致意外的行为。

他们还说

一个布局单元必须有它自己的表单,也避免因为同样的原因尝试更新布局单元,而是更新它的内容。

“必须有”(上面的重点是我的)在这里太强了,他们最好说明一下

      如果布局单元中需要表单,则为每个布局单元提供自己的表单

假设布局不会弄乱事物并且例如将部分添加到周围的 body 标签(如果它确实进行 dom 操作以实现某种行为),但我怀疑他们会给你保证。不按照您的要求执行此操作的另一个原因可能是,当“部分页面”的开发人员不完全了解'god form' 时,您可能会遇到嵌套表单。所以我建议不要这样做。

所以如果例如北和南布局单元包含某种固定功能(带有搜索的页眉,带有一些功能的页脚)然后将h:form 直接放在布局单元中。如果中心部分包​​含动态事物,例如一个ui:include,将`h:form 放在包含的部分中。

另见:

【讨论】:

  • 好的,谢谢您的回答!很有帮助!
猜你喜欢
  • 2015-09-04
  • 2014-05-22
  • 1970-01-01
  • 2011-05-20
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多