5

PrimeFacesを使用している場合p:commandButton

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

h:入力の検証メッセージ(デフォルトのメッセージとPrimeFacesのメッセージの両方)が表示されませんp:。たとえば、

<f:validateRequired />

次のようなデフォルトのコマンドボタンを使用している場合

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

私は検証を見ます。この違いの原因は何でしょうか?

PrimeFaces3.5とMojarra2.1.18を使用しています

<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>
4

1 に答える 1

7

@Partlovが質問の下のコメントに書いたように、

主な違いは、p:commandButton がデフォルトで AJAX であり、h:commandButton がデフォルトで非 AJAX であることです。

そう

<p:commandButton ... />

より似ている

<h:commandButton ...>
    <f:ajax/>
</h:commandButton>

しかし

<p:commandButton ...>
    <p:ajax/>
</p:commandButton>

は間違っており、未定義の動作につながります

またはその逆

<h:commandButton ... />

のようなものです

<p:commandButton ajax="false" ... />

p:commandButtonデフォルトでフォームを送信します。ただし、デフォルトでは、ajax 呼び出しが終了した後はフォーム内の何も更新されないため、メッセージは表示されません (開発モードでは、メッセージがエンキューされたが表示されないことがログ ファイルに示されます)。非 ajaxh: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:ajax(余分な)またはp:ajax内部に(余分な) を追加するp:commandXXXと、奇妙な未定義の動作が発生する可能性があります

こちらもご覧ください

于 2013-03-07T10:11:19.877 に答える