gpt4 book ai didi

forms - 为什么 primefaces menuitem 需要一个表单?

转载 作者:行者123 更新时间:2023-12-01 10:43:51 26 4
gpt4 key购买 nike

为什么我在 primefaces 中的菜单需要围绕 is 的形式?这是最好的方法吗?

需要的表格:

<h:form id="menuForm">
<p:menu>
<p:menuitem value="Simple Flow" action="simple-flow" ajax="false"/>
</p:menu>
</h:form>

无需表格:

<p:menu>
<p:menuitem value="Simple Flow" outcome="/simple-flow/simple-flow"/>
</p:menu>

最佳答案

带有结果的菜单项会生成一个纯 html a 标记,其中包含指向内部页面(在应用程序域内)的 href。单击时,会产生对指定页面的获取请求。顺便说一句,url 属性做同样的事情,但可以用来引用外部页面,这可以通过调查 PrimeFaces menu showcase 的来源看出。此功能不需要表单,因为不需要将数据发送到服务器。

action 属性也会生成一个a 标签,但它总是需要向服务器发送数据并能够调用服务器上的方法。 (这就是一般 Action 的功能在 JSF 中的定义方式)。在这种情况下,菜单项没有功能性的 hfref(它是“#”),但有一个通过 javascript 的 onclick(请参阅 showcase 的源代码)执行 ajax 调用(如果指定)或完整提交表单。由于在这两种情况下都需要将表单数据发送到服务器,因此需要一个表单(这就是 html 的工作方式)。

是的,您可以通过指定 process="@this"来排除发送其他数据,或者您可能没有任何数据,但服务器仍然需要知道发生了什么,并且行为必须与规范您的示例不调用服务器上的方法(没有#{...}),是一种优化,您现在可以在其中指定 JSF 2 中引入的直接页面。在 jsf 1.2 中,您需要导航规则为了这。 (参见 http://www.mkyong.com/jsf2/implicit-navigation-in-jsf-2-0/)

因此,您在用户界面中看到的行为可能没有什么不同,但在幕后却有所不同。

关于forms - 为什么 primefaces menuitem 需要一个表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com