Memos About Salesforce

Salesforceにハマってたこと!

Salesforce Immediate=true not work commandButton

こんにちは、管理人の@Salesforce.Zです。

VF画面を開発する場合、ボタンが必要です。キャンセルボタンも必ず必要されます。

しかし、画面に必須項目や入力規則がある場合、キャンセルボタンでコールしないのが普通ですよね。

こんな場合、カスタムコマンドボタン(commandButton)で実装し、immediate属性をtrueにすれば、解決になるですが

効かない時あります、今回、この効かない時の解消方法を共有します。

どうぞ!楽しみをしてください。

読んだら得ること

★ commandButtonのimmediate属性が効かない時の解消法

目次

immediate属性

ページの項目に関連付けられている入力規則を処理することなく、 このコンポーネントに関連付けられているアクションをすぐに実行するかどうかを指定する boolean 値。true に設定すると、アクションがすぐに実行され、入力規則はスキップされます。指定されていない場合、この値はデフォルトの false に設定されます。

問題

apex ページdocType="html-5.0"にすると、immediate属性がtrueにしても入力規則が動作してしまう

対策1:ページ全体適用

html-novalidate="novalidate"で解消、ページ全体適用

<apex:page standardController="Account" docType="html-5.0">
    <apex:form html-novalidate="novalidate">
        <apex:pageBlock title="Account Information">
            <apex:pageBlockButtons location="bottom">
                <apex:commandButton action="{!Cancel}" value="Cancel" />
            </apex:pageBlockButtons>
            <apex:pageBlockSection>
                <apex:inputField value="{!Account.Name}" required="true" ></apex:inputField>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

対策2:特定ボタンに適用

immediate="true" と html-formnovalidate="formnovalidate"、特定ボタンに適用

<apex:page standardController="Account" docType="html-5.0">
    <apex:form>
        <apex:pageBlock title="Account Information">
            <apex:pageBlockButtons location="bottom">
                <apex:commandButton action="{!Save}" value="Save" />
                 <apex:commandButton action="{!Cancel}" value="Cancel" immediate="true" html-formnovalidate="formnovalidate" />
            </apex:pageBlockButtons>
            <apex:pageBlockSection>
                <apex:inputField value="{!Account.Name}" required="true" ></apex:inputField>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>