gpt4 book ai didi

jsf - p :commandButton vs. h:commandButton

转载 作者:行者123 更新时间:2023-12-01 11:46:02 25 4
gpt4 key购买 nike

当我使用 PrimeFaces 时 p:commandButton

<p:commandButton action=#{bean.action} />

我没有看到输入的验证消息(默认的 h: 或 PrimeFaces p: 的。)例如
<f:validateRequired />

当我使用默认命令按钮时
<h:commandButton action=#{bean.action} />

我确实看到了验证。造成这种差异的原因是什么?

我在 Mojarra 2.1.18 中使用 Prime Faces 3.5
<h:form id="reliefhourheadcopy-form">

<h:panelGrid columns="1">
<h:outputText value="Kopiere Entlastungsstunden von" />
<h:outputText value="Semester: #{reliefHourHeadManagedBean.reliefHourHead.semester}" />
<h:outputText value="Jahr: #{reliefHourHeadManagedBean.reliefHourHead.year}" />
<h:outputText value="nach" />
</h:panelGrid>

<h:panelGrid columns="3">

<h:outputText value="Semester:" />
<p:selectOneMenu id="semester" value="#{reliefHourHeadManagedBean.semester}">
<f:selectItems value="#{reliefHourHeadManagedBean.semesterTypes}" />
</p:selectOneMenu>
<h:message for="semester" />

<h:outputText for="yearSpinner" value="Jahr:" />
<p:spinner id="yearSpinner" value="#{reliefHourHeadManagedBean.year}" maxlength="4" min="2000" max="2030" size="4">
<f:validateRequired />
<f:validateLongRange minimum="2000" maximum="2030" />
</p:spinner>
<h:message for="yearSpinner" />

</h:panelGrid>

<h:panelGrid columns="1" style="margin-top:25px">
<p:commandButton action="#{reliefHourHeadManagedBean.copyReliefHourHead}" value="Kopieren" icon="ui-icon-copy" >
<f:param name="reliefhourhead_id" value="#{reliefHourHeadManagedBean.reliefHourHeadId}" />
</p:commandButton>
</h:panelGrid>

</h:form>

最佳答案

就像@Partlov 在问题下方的评论中所写的那样,

Main difference is that p:commandButton is AJAX by default, and h:commandButton is non-AJAX by default.


所以
<p:commandButton ... />
更像是
<h:commandButton ...>
<f:ajax/>
</h:commandButton>
<p:commandButton ...>
<p:ajax/>
</p:commandButton>
错误并导致未定义的行为
或者反过来
<h:commandButton ... />
就好像
<p:commandButton ajax="false" ... />
p:commandButton将默认提交表单。但是,默认情况下,在 ajax 调用完成后它不会更新表单中的任何内容,因此不会显示消息(在开发模式下,日志文件中会显示消息已入队但未显示)。非ajax h:commandButton进行整页刷新以显示消息。为了在使用 p:commandButton 时更新表单(包含消息组件)您需要添加 update属性:
<p:commandButton action="#{reliefHourHeadManagedBean.copyReliefHourHead}" value="Kopieren" icon="ui-icon-copy" update="@form">
<f:param name="reliefhourhead_id" value="#{reliefHourHeadManagedBean.reliefHourHeadId}" />
</p:commandButton>
添加一个(多余的) f:ajaxp:ajax里面 p:commandXXX可能导致奇怪的未定义行为
另见
  • Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes
  • 关于jsf - p :commandButton vs. h:commandButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15267958/

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