2013-04-02 2 views
0

rich text 값을 rich tect 컨트롤의 replaceItemValue로 설정하는 방법은 무엇입니까? 서식있는 텍스트 컨트롤에서 replaceItemValue를 사용하여 문서 필드를 설정 하시겠습니까?

는 여기 코드의이 비트를 발견 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"); 

이 맞습니까? 이 코드는 필드가 이미 존재한다는 사실에 달려 있습니다. 필드가 존재하지 않는 경우 어떻게 처리합니까? 리치 텍스트 컨트롤의 내용에 필드 값을 설정하는 더 쉬운 방법이 있습니까?

+1

프로그래밍 방식으로 항목의 값을 변경하려는 이유는 무엇입니까? 가장 쉬운 방법은 RT 컨트롤을 문서 소스의 richtext 항목에 바인딩하는 것입니다. –

답변

0

나는 원래의 문제를 해결할 수있었습니다. 내 문제를 확장하려면 대화 상자를 사용하여 양식/문서 B 양식 A/양식 A에서 대화 상자를 사용하여 만드는 데 문제가있었습니다. 양식 B의 모든 변경 내용이 문서 A의 데이터 소스에 저장됩니다.

ingoreRequestParams가 Form B의 데이터 소스에서 발견되어이를 설정하고 Form B에 양식 A 작성 문제를 해결했습니다.

3

데이터 원본을 무겁게 처리하도록하십시오. 이유에 대한 길고 지루한 (그러나 철저한) 설명은 this article을 읽어보십시오.

는 사용하지 마십시오 :

getComponent("someID").getValue()

사용하는 대신 :하지만, 여기에 빠른 버전입니다

someDataSource.getValue("someFieldName")

이 항상 데이터에 액세스 할 수있는 더 효율적인 방법입니다 : 대신 일치하는 항목을 찾기 위해 컴포넌트 트리를 거치지 않고 바로 데이터 소스로 간다. 당신이 값을 물어 본다면 컴포넌트는 어쨌든 질문해야한다. 마찬가지로

는 사용하지 않는다 :

someDataSource.replaceItemValue("someFieldName", someValue)

를 대신 사용 :

someDataSource.setValue("someFieldName", someValue)

후자는 입력 종류에 훨씬 더 유연하다. 데이터 소스에는 값이 텍스트, 날짜, 숫자, 서식있는 텍스트, 파일 업로드 등 여부에 따라 수행 할 작업을 결정하기위한 모든 논리가 이미 포함되어 있습니다. 자신의 코드에서 해당 논리를 복제 할 필요가 없습니다.

목표가 현재 문서의 데이터를 기반으로 별도의 문서를 업데이트하는 것이라면 업데이트 할 문서를 가리키는 별도의 문서 데이터 소스를 정의하면됩니다. 현재 문서에서 지정한 필드가 다음 다른 문서를 작성하는 항목이 서식있는 텍스트가 될 것이다, 서식있는 텍스트 인 경우, 위의 코드와

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

: 다음 그것은 말 그대로이 간단합니다. 현재 문서의 다른 유형이라면 다른 문서의 동일한 유형이됩니다. getValue()setValue()을 사용하면 데이터 유형에주의를 기울일 필요가 없습니다. 데이터 소스가 모든 것을 처리합니다.

보너스 포인트의 경우 범위가 에서 applicationScope이므로 모든 사용자가 업데이트를 즉시 캐시 할 수 있습니다. 업데이트하는 문서가 사용자별로 다르면 sessionScope입니다.

+0

하지만이 모든 것은 내 컨트롤에 바인딩 된 데이터 소스가 올바른 것으로 가정합니다. 아마도 컨트롤에 바인딩 된 데이터 소스가 없다는 것을 설명해야합니다. –

+0

자신의 데이터 소스가있는 페이지의 대화 상자를 사용하고 있습니다. 대화 상자의 데이터 소스에 문제가있어서 바인드하지 않기로 결정하고 OK 버튼에 내 필드 볼트를 모두 설정했습니다. –

관련 문제