0

簡単な「お問い合わせ」用の XPage を作成します。

「表示エラー」コントロールを介してエラーを表示するサーバー側の検証を実施します。クリックするとメールを送信するボタンがあります。

機能は Firefox 4.0.1 を使用して動作しますが、IE8 では動作しません。

次の互換性コードを beforeRenderResponse イベントに入れました。

try {
if (context.getUserAgent().isIE(8, 8)) {
var exCon = facesContext.getExternalContext();

var response = exCon.getResponse();
response.setHeader("X-UA-Compatible", "IE=EmulateIE7");
}
} catch (e) {
}

役に立たないようです。アイデア/提案はありますか?

デレク

アップデート:

リクエストどおり - ボタンのコードは次のとおりです。

var doc = database.createDocument();
doc.replaceItemValue("Form", "Memo");
doc.replaceItemValue("Subject", "Contact Us Received");
doc.replaceItemValue("SendTo", "detnyre@mac.com");
doc.replaceItemValue("DisplaySent","detnyre@mac.com");

//Build Body

var1 = "The following Contact Us message was received: <br><br>";
var2 = var1 + "Contact Name: " + document1.getItemValueString("ContactName").valueOf()+ "<br><br>";
var3 = var2 + "Email Address: " + document1.getItemValueString("ContactEmail").valueOf()+ "<br><br>";
var4 = var3 + "Phone Number: " + document1.getItemValueString("ContactPhone").valueOf() + "<br><br>";
var5 = var4 + "Subject: " + document1.getItemValueString("ContactSubject").valueOf() + "<br><br>";
var6 = var5 + "Message: " + document1.getItemValueString("ContactMessage").valueOf() + "<br>";

body = doc.createMIMEEntity()
stream = session.createStream()
stream.writeText(var6)
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0)

// Send
doc.send();
context.redirectToPage("Home")

生成された XML は次のとおりです。

<xp:button value="Email Test" id="button2">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript:var doc = database.createDocument();
doc.replaceItemValue("Form", "Memo");
doc.replaceItemValue("Subject", "Contact Us Received");
doc.replaceItemValue("SendTo", "detnyre@mac.com");
doc.replaceItemValue("Princial","detnyre@mac.com");
doc.replaceItemValue("ReplyTo","detnyre@mac.com");
doc.replaceItemValue("tmpDisplaySentBy","detnyre@mac.com");
doc.replaceItemValue("DisplaySent","detnyre@mac.com");
doc.replaceItemValue("From","DonahueOnline")

//Build Body
var1 = "The following Contact Us message was received: <br><br>";
var2 = var1 + "Contact Name: " + document1.getItemValueString("ContactName").valueOf()+ "<br><br>";
var3 = var2 + "Email Address: " + document1.getItemValueString("ContactEmail").valueOf()+ "<br><br>";
var4 = var3 + "Phone Number: " + document1.getItemValueString("ContactPhone").valueOf() + "<br><br>";
var5 = var4 + "Subject: " + document1.getItemValueString("ContactSubject").valueOf() + "<br><br>";
var6 = var5 + "Message: " + document1.getItemValueString("ContactMessage").valueOf() + "<br>";

body = doc.createMIMEEntity()
stream = session.createStream()
stream.writeText(var6)
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0)

// Send
doc.send();
context.redirectToPage("Home")

}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

デレク

============

アップデート #2

コードをボタンからクエリ保存イベントに移動しました。同じ結果 - Firefox では動作しますが、IE8 では動作しません。何か基本的な問題があり、それを見つけることができないと仮定します...これが新しいソースコードです:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">


<xp:this.beforeRenderResponse><![CDATA[#{javascript:try {
if (context.getUserAgent().isIE(8, 8)) {
var exCon = facesContext.getExternalContext();
var response = exCon.getResponse();
response.setHeader("X-UA-Compatible", "IE=EmulateIE7");
}
} catch (e) {
}}]]></xp:this.beforeRenderResponse>
<xp:br></xp:br>
<xp:this.data>
    <xp:dominoDocument var="document1" formName="CUF">
        <xp:this.querySaveDocument><![CDATA[#{javascript:var doc = database.createDocument();
doc.replaceItemValue("Form", "Memo");
doc.replaceItemValue("Subject", "Contact Us Received");
doc.replaceItemValue("SendTo", "detnyre@mac.com");
doc.replaceItemValue("Princial","detnyre@mac.com");
doc.replaceItemValue("ReplyTo","detnyre@mac.com");
doc.replaceItemValue("tmpDisplaySentBy","detnyre@mac.com");
doc.replaceItemValue("DisplaySent","detnyre@mac.com");
doc.replaceItemValue("From","DonahueOnline")

//Build Body
var1 = "The following Contact Us message was received: <br><br>";
var2 = var1 + "Contact Name: " + document1.getItemValueString("ContactName").valueOf()+ "<br><br>";
var3 = var2 + "Email Address: " + document1.getItemValueString("ContactEmail").valueOf()+ "<br><br>";
var4 = var3 + "Phone Number: " + document1.getItemValueString("ContactPhone").valueOf() + "<br><br>";
var5 = var4 + "Subject: " + document1.getItemValueString("ContactSubject").valueOf() + "<br><br>";
var6 = var5 + "Message: " + document1.getItemValueString("ContactMessage").valueOf() + "<br>";

body = doc.createMIMEEntity()
stream = session.createStream()
stream.writeText(var6)
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0)

// Send
doc.send();
context.redirectToPage("Home")

}]]></xp:this.querySaveDocument></xp:dominoDocument>
</xp:this.data>
<xp:table
    style="margin-top:5.0px;margin-bottom:5.0px;padding-top:5.0px;padding-bottom:5.0px">
    <xp:tr>
        <xp:td>
            <xp:span style="font-size:16pt">Contact Us</xp:span>
        </xp:td>
    </xp:tr>
    <xp:tr>
        <xp:td></xp:td>
    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            * (denotes required field)
        </xp:td>
    </xp:tr>
    <xp:tr>
        <xp:td></xp:td>
    </xp:tr>
    <xp:tr>
        <xp:td style="width:400px;font-size:12pt">
            Name:*
            <xp:message id="ContactNameError" for="ContactName"
                style="color:rgb(255,128,128);font-size:9pt">
            </xp:message>
        </xp:td>

    </xp:tr>

    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactName"
                value="#{document1.ContactName}" style="width:200px"
                required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Name is required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
            <xp:br></xp:br>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            Email Address:* &#160;
            <xp:message id="message1"
                style="color:rgb(255,0,0);font-size:9pt" for="ContactEmail">
            </xp:message>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactEmail" style="width:200px"
                value="#{document1.ContactEmail}" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Email Address is Required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">Phone Number:</xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactPhone" style="width:200px"
                value="#{document1.ContactPhone}" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Phone Number is Required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
            <xp:br></xp:br>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            Subject:* &#160;
            <xp:message id="message2"
                style="color:rgb(255,0,0);font-size:9pt" for="ContactSubject">
            </xp:message>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactSubject" style="width:300px"
                value="#{document1.ContactSubject}" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Subject is required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            Message:* &#160;
            <xp:message id="message3"
                style="color:rgb(255,0,0);font-size:9pt" for="ContactMessage">
            </xp:message>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputTextarea id="ContactMessage"
                style="height:250px;width:99%" value="#{document1.ContactMessage}"
                required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="A message is required.">
                    </xp:validateRequired>

                </xp:this.validators>
            </xp:inputTextarea>
        </xp:td>

    </xp:tr>
</xp:table>


<xp:br></xp:br>
<xp:button value="Submit" id="button1"><xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
    <xp:saveDocument var="document1"></xp:saveDocument>
</xp:this.action></xp:eventHandler></xp:button></xp:view>

==========

更新 #3

投稿された提案を試しました。IE8 の互換モードを設定するコードを削除しました。ボタンを作り直しました。ボタンコードに save="false" を含めました。FireFox では引き続き動作しますが、IE8 では動作しません。IE8 はページを表示しますが、検証と電子メール コードが実行されません...奇妙な...

最新のソースコードは次のとおりです。

<xp:br></xp:br>
<xp:this.data>
    <xp:dominoDocument var="document1" formName="CUF">
        <xp:this.querySaveDocument><![CDATA[#{javascript:var doc = database.createDocument();

doc.replaceItemValue("フォーム", "メモ"); doc.replaceItemValue("件名", "お問い合わせを受け取りました"); doc.replaceItemValue("SendTo", "detnyre@mac.com"); doc.replaceItemValue("プリンシパル","detnyre@mac.com"); doc.replaceItemValue("ReplyTo","detnyre@mac.com"); doc.replaceItemValue("tmpDisplaySentBy","detnyre@mac.com"); doc.replaceItemValue("DisplaySent","detnyre@mac.com"); doc.replaceItemValue("From","DonahueOnline")

//Build Body var1 = "次のお問い合わせメッセージを受信しました:

"; var2 = var1 + "連絡先名: " + document1.getItemValueString("連絡先名").valueOf()+ "

"; var3 = var2 + "メールアドレス: " + document1.getItemValueString("ContactEmail").valueOf()+ "

"; var4 = var3 + "電話番号: " + document1.getItemValueString("ContactPhone").valueOf() + "

"; var5 = var4 + "件名: " + document1.getItemValueString("ContactSubject").valueOf() + "

"; var6 = var5 + "メッセージ: " + document1.getItemValueString("ContactMessage").valueOf() + "
";

body = doc.createMIMEEntity() stream = session.createStream() stream.writeText(var6) body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0)

// 送信する doc.send(); context.redirectToPage("ホーム")

}]]> お問い合わせ * (必須フィールドを示します) 名前:*

    </xp:tr>

    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactName"
                value="#{document1.ContactName}" style="width:200px"
                required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Name is required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
            <xp:br></xp:br>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            Email Address:* &#160;
            <xp:message id="message1"
                style="color:rgb(255,0,0);font-size:9pt" for="ContactEmail">
            </xp:message>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactEmail" style="width:200px"
                value="#{document1.ContactEmail}" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Email Address is Required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">Phone Number:</xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactPhone" style="width:200px"
                value="#{document1.ContactPhone}" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Phone Number is Required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
            <xp:br></xp:br>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            Subject:* &#160;
            <xp:message id="message2"
                style="color:rgb(255,0,0);font-size:9pt" for="ContactSubject">
            </xp:message>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputText id="ContactSubject" style="width:300px"
                value="#{document1.ContactSubject}" required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="Subject is required.">
                    </xp:validateRequired>
                </xp:this.validators>
            </xp:inputText>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td style="font-size:12pt">
            Message:* &#160;
            <xp:message id="message3"
                style="color:rgb(255,0,0);font-size:9pt" for="ContactMessage">
            </xp:message>
        </xp:td>

    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:inputTextarea id="ContactMessage"
                style="height:250px;width:99%" value="#{document1.ContactMessage}"
                required="true">
                <xp:this.validators>
                    <xp:validateRequired
                        message="A message is required.">
                    </xp:validateRequired>

                </xp:this.validators>
            </xp:inputTextarea>
        </xp:td>

    </xp:tr>
</xp:table>


<xp:br></xp:br>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true" save="false" refreshMode="complete">
<xp:this.action>
    <xp:saveDocument var="document1"></xp:saveDocument>
</xp:this.action>

4

3 に答える 3

1

あなたのコードはボタンにあるべきではありません。ボタンを「submit」タイプに設定し、コードをデータ ソースの querysave イベントに移動します。

于 2012-02-11T23:13:48.593 に答える
1

実際のコードがなければ、問題を診断するのは困難です。これは、Firefox で機能する正しいボタン タイプを設定していないことに関連している可能性がありますが、IE は壊れます。私がそれについて書いたこのブログ投稿を参照してください。

http://blog.thimojansenit.nl/2011/06/fix-default-type-for-submit-buttons-in.html

(編集) この場合、コードを見てから eventHandler に「save="false"」を追加して試してください。このような:

<xp:button value="Submit" id="button1">
<xp:eventHandler event="onclick" submit="true" save="false" refreshMode="complete">
    <xp:this.action>
        <xp:saveDocument var="document1"></xp:saveDocument>
    </xp:this.action>
</xp:eventHandler>

私にとっては、送信イベントで IE が Firefox と同じように動作しない場合に、これでうまくいきます。

于 2012-02-11T21:16:26.387 に答える
0

なぜie7をエミュレートしているのですか?8.5.3 サーバーを使用している場合は、ie8 標準または可能であれば 9 を使用してください。ie7 はよくありません。

于 2012-02-13T14:11:56.840 に答える