1

xforms:submitイベントは、送信が行われる前に発生し、送信前のノード値への変更を実行できます。

これを試してみましたが、ブラウザで値が変更されていることがわかりましたが、保存されたノードにはまだ古いデータが残っています。これに関する任意のアイデア。

<xforms:submission id="save-instance" ref="instance('form-instance')" 
    action="{instance('temp-instance')/submit-url}" method="post" validate="false" replace="none">

    <xforms:action ev:observer="save-instance" ev:event="xforms-submit">
        <xforms:message level="modal" value="'About to Submit'" />
        <xxforms:script>
            ORBEON.xforms.Document.setValue("location-of-dda-id-a", 'Test3');
        </xxforms:script>
    </xforms:action>

    <xforms:action ev:observer="save-instance" ev:event="xforms-submit-done">
        <xforms:message level="modal" ref="instance('metaData')/save-success-msg" />
    </xforms:action>
    <xforms:message ev:event="xforms-submit-error" level="modal" ref="instance('metaData')/save-error-msg" />
</xforms:submission>

また、idlocation-of-dda-id-aは入力フィールドに指定されたIDです。

基本的に、MSドキュメントからコピーして貼り付けた特殊文字を置き換えたいと思いました。以下は、これを実現できるJs関数です。

var specialChars = [/\u0011/g, /\u0012/g, /\u0013/g, /\u0014/g, /\u0016/g, /\u2018/g, /\u2019/g, /\u201c/g, /\u201d/g, /\u2026/g, /\u2013/g, /\u2219/g, /\u2022/g,/\u00BF/g];
var specialCharsReplacement = ["", "", "", "", "", "'", "'", "\"", "\"", "...","-","-","-","?"];

function replaceSpecialChars(formName) 
{
    for(i = 0; i < formName.elements.length; i++) 
    {
        if (formName.elements[i].type == 'textarea' || formName.elements[i].type=='text')
        {        
            var commentText = formName.elements[i].value;
            if(commentText != 0) 
            {          
                for(j = 0; j < specialChars.length; j++) 
                {
                    commentText = commentText.replace(specialChars[j], specialCharsReplacement[j]);
                }               
                formName.elements[i].value = commentText;
            }
        }
    }

}

そしてライン

formName.elements[i].value = commentText;

に置き換える必要があります

ORBEON.xforms.Document.setValue(formName.elements[i].id.split("\$")[0], commentText);

しかし、それは機能していません。

4

1 に答える 1

3

これはトリッキーなものです。xforms-submitアクションは送信が完了する前に実行されると言うのは正しいですが、これはサーバーで発生し、xxforms:script他のすべてがサーバーで実行された後にブラウザーで実行されます。したがって、を使用するときは多少注意する必要がありますxxforms:script

この場合、値を設定するxforms:setvalue代わりにを使用することをお勧めします。(一般的に、 XFormsではできないことのためxxforms:scriptに残しておく方が良いです。)xxforms:script

于 2012-12-19T18:30:02.980 に答える