0

XPage に、ボタンで開く拡張ライブラリ ダイアログ コントロールがあります。

XSP.openDialog("#{id:commentsDialog}");

私の XPage には、document1 というドキュメント ソースがあります。これらのフィールド (データ パレットからドラッグ アンド ドロップ) をダイアログ コントロールに配置すると、フィールド (docID) は存在しますが、編集できません。表示用に計算されたように見えます。

<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
    <xp:panel>
        <xp:table style="width:100%">
            <xp:tr>
                <xp:td>
                    <xp:label value="Enter your comments..." id="label2"></xp:label>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputTextarea id="comments" style="width:100%;height:100px">
                    </xp:inputTextarea>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:div style="text-align:right">
                        <xp:button value="Submit" id="submitButton">
                            <xp:eventHandler event="onclick" submit="true"
                                refreshMode="complete">
                                <xp:this.action><![CDATA[#{javascript:saveComments();}]]></xp:this.action>
                            </xp:eventHandler>
                        </xp:button>
                        <xp:button id="cancelButton" value="Cancel">
                            <xp:eventHandler event="onclick" submit="false">
                                <xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:button>
                    </xp:div>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputText value="#{document1.docID}" rendered="false"
                        id="docID"></xp:inputText>
                </xp:td>
            </xp:tr>
        </xp:table>
    </xp:panel>
    <xp:br></xp:br>
</xe:dialog>

ユーザーが値を入力する入力テキスト領域がありますが、SSJS を使用してその値を取得するのに問題があります。私が試してみました:

    function getComponentValue(id){
      var field = getComponent(id);
      var value = field.getSubmittedValue();
      if( null == value ){
         // else not yet submitted
         value = field.getValue();
      }
      return value
    }

入力テキスト エリアの値を取得するには、どうすればよいかわかりません。データ パレットの既存のフィールドにバインドすると、編集不可のように見え、値を入力できないからです。

また、SSJS を呼び出すダイアログ コントロールに送信ボタンがあります。

function saveComments() {
// Need to create a comments doc for the movie...
var db:NotesDatabase = session.getCurrentDatabase();
var doc:NotesDocument = currentDocument.getDocument();
var unid = getComponentValue("docID");
// Grab comments from dialog...
var comments = getComponentValue("comments");
// Create the comments doc...   
var docComm:NotesDocument = db.createDocument();
docComm.replaceItemValue("Form", "comment");    
var nowValue = @Text(@Now());
var currentUser = sessionScope.get("currentUser");
docComm.replaceItemValue("cm_Key", unid);
docComm.replaceItemValue("cm_By", currentUser);
docComm.replaceItemValue("cm_Date", nowValue);
docComm.replaceItemValue("cm_Key", unid);
docComm.save();
}

サーバー側からダイアログを閉じるにはどうすればよいですか?

ですから、3 つのこと (忍耐に感謝します):

  1. ダイアログ コントロールでフィールドを編集可能にする方法
  2. ドキュメントのフィールドにバインドされていない入力テキスト領域から値を取得する方法1
  3. サーバー側からダイアログを閉じる方法

ありがとう!


編集: 画像を正しく表示できるように、このコメントに編集を加えました...

  1. docID フィールドを表示できるようにしましたが、計算されたように見え、編集できません。
  2. 2 番目のドキュメント データ ソース (commentDocument) を追加し、フィールドの値を [データ] パレットの値に設定しました。編集できない可能性があると考えて、フィールドが表示されません。

画像は次のとおりです。緑色のボックスはコメント フィールド (commentsDocument ソースの cm_Comm) が存在する場所であり、赤色のボックスは編集不可の docID フィールドです。 ダイアログ コントロールで編集できないフィールド

コントロールの背後にあるコードは次のとおりです。

<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
    <xp:panel>
        <xp:table style="width:100%">
            <xp:tr>
                <xp:td>
                    <xp:label value="Enter your comments..." id="label2"></xp:label>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputTextarea id="comments" style="width:100%;height:100px"
                        value="#{commentDocument.cm_Comm}">
                    </xp:inputTextarea>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:div style="text-align:right">
                        <xp:button value="Submit" id="submitButton">
                            <xp:eventHandler event="onclick" submit="true"
                                refreshMode="complete">
                                <xp:this.action><![CDATA[#{javascript:saveComments();getComponent("commentsDialog").hide();}]]></xp:this.action>
                            </xp:eventHandler>
                        </xp:button>
                        <xp:button id="cancelButton" value="Cancel">
                            <xp:eventHandler event="onclick" submit="false">
                                <xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:button>
                    </xp:div>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputText value="#{document1.docID}" id="docID"></xp:inputText>
                </xp:td>
            </xp:tr>
        </xp:table>
    </xp:panel>
    <xp:br></xp:br>
</xe:dialog>

私が間違っていることを教えてください-これに感謝します!

4

2 に答える 2

4

ダイアログ コントロールでフィールドを編集可能にする方法

  1. value プロパティを inputTextarea に追加します。たとえば、viewScope 変数 ( value="#{viewScope.myTextArea}") を追加して、XPages (JSF) が後で処理するテキスト領域のコンテンツを格納する場所を確保できるようにします。

  2. あなたのinputTextフィールドはに設定されていrendered="false"ます。したがって、コントロールをレンダリングするように設定することから始めます (したがって、render="false" プロパティを削除します)。

ドキュメントのフィールドにバインドされていない入力テキスト領域から値を取得する方法1

上記の回答 1 を参照してください。

サーバー側からダイアログを閉じる方法

を使用しgetComponent("commentsDialog").hide()ます。

于 2013-03-02T20:49:42.880 に答える
1

"comment" の var を持つ 2 番目の DominoDocument データ ソースを作成します。そのスコープを「リクエスト」に設定します。cm_Key、cm_By、および cm_Date の非表示の入力コンポーネントを作成し、それぞれに適切な defaultValue を設定します。例えば:

<xp:inputHidden value="#{comment.cm_By}" defaultValue="#{context.user.distinguishedName}" />

次に、ダイアログ フィールドをそのデータ ソースにバインドするだけです。

<xp:inputTextarea id="comments" style="width:100%;height:100px" value="#{comment.cm_Comment"}>

したがって、[送信] ボタンは、「ドキュメントを保存する」という単純なアクションと、1 行の「スクリプトを実行する」という単純なアクションになります。

<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action>
        <xp:actionGroup>
            <xp:actionGroup>
                <xp:saveDocument var="comment" />
                <xp:executeScript>
                    <xp:this.script><![CDATA[#{javascript:getComponent("commentsDialog").hide();}]]></xp:this.script>
                </xp:executeScript>
            </xp:actionGroup>
        </xp:actionGroup>
    </xp:this.action>
</xp:eventHandler>

コメント データ ソースが各リクエストにスコープされている場合、毎回新しいドキュメントが作成されます。プログラムでドキュメントを作成する必要はありません... データ ソースに管理させてください。

于 2013-03-03T00:42:33.630 に答える