VisualForceとLightning メッセージ表示方法

試験対策でお伝えできるもの残り少なくなってきました。
今回はLightningさん登場です。

スポンサーリンク

メッセージ表示の違いを押さえる

このページでは、ユーザインターフェースにエラーを表示する場合のメッセージ出力方法について述べた内容になります。
VisualForceとLightningでメッセージの出し方が異なるので、エラーの種類による出し方の違いと、使用するコードについて、違いを把握しておきましょう。

VisualForceのメッセージ表示

VisualForceでのエラーは、<apex:pageMessages>タグを使用します。
Apex側では、ApexPages.addMessageを使用して、エラー種別と一緒にメッセージを追加します。

こちらがコード例です。
シンプルにメッセージだけを出すページです。

VisualForceはこんな感じ。

VFmessage.page

<apex:page controller="VFmessageCtrl" action="{!init}">
    <apex:pageMessages />
</apex:page>

Apexクラスはこのように記述します。
VFmessageCtrl.cls

public with sharing class VFmessageCtrl {

    public PageReference init() {
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'Confirm', 'detail - confirm'));
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Error', 'detail - error'));
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, 'Fatal', 'detail - fatal'));
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'Info', 'detail - info'));
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.WARNING, 'Warning', 'detail - warning'));
        return null;
    }
}

そして表示するとこのような感じになります。
Visualforceのエラー表示

メッセージの表示は、ApexPages.addMessageで追加したメッセージの順にはならず、Fatal→Error→Warning→Info→Confirmの順に表示されています。
エラーの度合いが高い順ですね。

Lightningのメッセージ表示

Lightningのメッセージ表示は2種類あります。
使いわけとしては、復旧可能か復旧不可能かということです。
復旧可能なエラーの例としては、入力エラーなどユーザ次第でエラーが解消されるもの。
復旧不可能なエラーはシステムエラーなど、ユーザ自身でどうしようも無いエラーとなります。

復旧可能なエラー

まずは、復旧可能なエラーから。
Lightningコンポーネントのエラー表示は、ui:messageを使用します
コントローラー側で定義したui:messageを、$A.createComponentsメソッドを使用してコンポーネントに追加します。

コンポーネント側はコンポーネント表示用のdivタグを配置します。
ShowMessage1.cmp

<aura:component>
    <div aura:id="msg" />
    <ui:button label="復帰可能なエラー" press="{!c.showErrMsg1}"/>
    <ui:button label="復帰不可能なエラー" press="{!c.showErrMsg2}"/>
</aura:component>

コントローラ側でエラー用のコンポーネントを定義して表示する処理を入れます。
ボタンを押すとエラーが発生するようにします。
ShowMessage1Controller.js

({
    showErrMsg1: function(cmp) {
        try {
            // 例外を発生させる
            throw new Error("あなたの人生やり直しがききます");
        }
        catch (e) {
            // エラー用のコンポーネントを定義
            $A.createComponents([
                ["ui:message",{
                	"title" : "復帰可能なエラー発生",
                	"severity" : "error",
                }],
                ["ui:outputText",{
                	"value" : e.message
                }]
            ],
            function(components, status){
                if (status === "SUCCESS") {
                    var message = components[0];
                    var outputText = components[1];
                    // ui:messageにui:outputTextの内容をセット
                    message.set("v.body", outputText);
                    // divタグにメッセージを表示
                    var div1 = cmp.find("msg");
                    div1.set("v.body", message);
                }
            }
        );
        }
    },
    showErrMsg2: function(cmp) {
        throw new Error("あなたの人生やり直しがききません");
    }
})

メッセージはこのように表示されます。
Lightningコンポーネントの復旧可能なエラー

復旧不可能なエラー

復旧不可能なエラーは、throw new Error()で例外をスローし、コントローラ側でキャッチしなければ、ネイティブJavaScript Error オブジェクトが発生します。
Lightningコンポーネントの復旧不可能なエラー

まとめ

  • VisualForceは<apex:pageMessages>タグで表示、Apex側でApexPages.addMessageを使用
  • Lightningの復旧可能なエラーはui:messageを使用
  • Lightningの復旧不可能なエラーはthrow new Error()で例外をスロー

コメント