Jsf p:commandButton与h:commandButton

Jsf p:commandButton与h:commandButton,jsf,primefaces,commandbutton,Jsf,Primefaces,Commandbutton,当我使用PrimeFacesp:commandButton <p:commandButton action=#{bean.action} /> 当我使用默认命令按钮时,如 <h:commandButton action=#{bean.action} /> 我确实看到了验证。造成这种差异的原因是什么 我在Mojarra 2.1.18中使用Prime Faces 3.5 <h:form id="reliefhourheadcopy-form">

当我使用PrimeFaces
p:commandButton

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

<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在问题下方的评论中写道

主要的区别是p:commandButton默认为AJAX,h:commandButton默认为非AJAX

所以

p:commandXXX
中添加(多余的)
f:ajax
p:ajax
会导致奇怪的未定义行为

另请参见


主要区别在于
p:commandButton
默认为AJAX,而
h:commandButton
默认为非AJAX。整个表单的邮政编码。可能您只是没有使用primefaces按钮更新验证消息字段。将
update=“@form”
添加到
p:commandButton
中,然后查看是否显示错误消息。感谢partlov,这是我需要的提示!update=“@form”起作用。但也包括ajax=“false”。如果我使用ajax=“false”,也会正确更新。关于caron。是的,在这种情况下,非AJAX请求按钮将充当
h:commandButton
@palov:您想创建一个包含所有这些信息的答案吗?在解释问题时,被否决的答案不是很好。否则我想写一个答案,里面有所有的细节。它会提交整个表单,只是不会更新整个表单。你的意思是,这会发生而不进行更新?如果是这种情况,我将编辑我的答案。通过更新,您可以控制更新的部分,通过流程,您可以控制提交的内容。通过此更新,您可以更新表单(使用消息,因此消息将可见)。如果没有更新,你就看不到消息。谢谢你,在我用primefaces混合更新和处理之前!我将编辑这个答案。
<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>
<p:commandButton ... />
<h:commandButton ...>
    <f:ajax/>
</h:commandButton>
<p:commandButton ...>
    <p:ajax/>
</p:commandButton>
<h:commandButton ... />
<p:commandButton ajax="false" ... />
<p:commandButton action="#{reliefHourHeadManagedBean.copyReliefHourHead}" value="Kopieren" icon="ui-icon-copy" update="@form">
    <f:param name="reliefhourhead_id" value="#{reliefHourHeadManagedBean.reliefHourHeadId}" />
</p:commandButton>