0

リッチテクトコントロールからreplaceItemValueでrichText値を設定するにはどうすればよいですか?

ここでこのコードを見つけました: http://www.bleedyellow.com/blogs/martin/entry/save_a_richtext_field_from_a_xpage_to_a_document?lang=en_us

var doc = configuratieformulieren.getDocumentByKey("ConfiguratieIVNL", true);
if(doc == null){
    return;
}else{    
    var titel = getComponent("inputTextIBPTitelIVNL").getValue();
    doc.replaceItemValue("IBPTitel",titel);    
   var inhoud = getComponent("inputRichTextIBPInhoudIVNL").getValue();
   if (inhoud != null){ 
   var contentType = doc.getMIMEEntity("IBPInhoud").getContentType();
   var encoding = doc.getMIMEEntity("IBPInhoud").getEncoding();
   var str = session.createStream();
   inhoud.toString();
   str.writeText(inhoud.toString());
   doc.getMIMEEntity("IBPInhoud").setContentFromText(str, contentType, encoding);    
 }

 doc.save(true, true);
}
sessionScope.put("FormulierIVNLInfoBeschPG","Lezen");

それが正しいか?このコードは、フィールドが既に存在するという事実に依存しているようです。フィールドが存在しない場合、これはどのように処理されますか? フィールド値をリッチ テキスト コントロールのコンテンツに設定する簡単な方法はありますか?

4

2 に答える 2

3

面倒な作業はデータ ソースに任せましょう。その理由の長くて退屈な (しかし徹底的な) 説明については、この記事をお読みください。しかし、ここにクイックバージョンがあります:

使用しないでください:

getComponent("someID").getValue()

代わりに、次を使用します。

someDataSource.getValue("someFieldName")

これは、データにアクセスするための常により効率的な方法です。一致するものを見つけるためにコンポーネント ツリーをスパイダーする代わりに、データ ソースに直接アクセスします。

同様に、使用しないでください:

someDataSource.replaceItemValue("someFieldName", someValue)

代わりに、次を使用します。

someDataSource.setValue("someFieldName", someValue)

後者は、入力タイプに対してはるかに柔軟です。データ ソースには、値がテキスト、日付、数値、リッチ テキスト、ファイルのアップロードなどであるかどうかに基づいて何をすべきかを決定するためのすべてのロジックが既に含まれています。独自のコードでそのロジックを複製する必要はありません。

そのため、現在のドキュメントのデータに基づいて別のドキュメントを更新することが目的の場合は、更新するドキュメントを指す別のドキュメント データ ソースを定義するだけです。次に、文字通り次のように簡単です。

configData.setValue("RichTextData", currentDocument.getValue("RichTextData"));
configData.save();

上記のコードでは、現在のドキュメントで指定したフィールドがリッチ テキストの場合、他のドキュメントで作成されるアイテムはリッチ テキストになります。現在のドキュメントで他のタイプの場合、他のドキュメントでも同じタイプになります。getValue()と を使用するとsetValue()、データ型に注意を払う必要はありません... データ ソースがすべてを処理します。

ボーナス ポイントについては、すべてのユーザーの更新がすぐにキャッシュされるように範囲configDataを指定applicationScopeします... またはsessionScope、更新しているドキュメントがユーザー固有のものである場合。

于 2013-04-03T01:34:47.110 に答える
0

元の問題を解決できました。私の問題をさらに詳しく説明すると、フォーム A のダイアログ ボックスを使用して、ダイアログ ボックスを使用してフォーム / ドキュメント A からフォーム / ドキュメント B を作成する際に問題が発生していました。

フォーム B のデータソースで ingoreRequestParams を見つけて設定し、フォーム B がフォーム A ドキュメントに書き込む際の問題を解決しました。

于 2013-04-03T12:13:58.497 に答える