いいね!数

0

閲覧数
195

ビュー上に複数行コントロール(Body)で入力した内容を改行させて表示させたいと思い、以下のQ&Aを参照したのですが、

うまくいきません。

https://xpages.jp/QA/qa.nsf/x_anspage.xsp?docId=19A4DA372C4D9D80492582260019450F

 

上記のQ&Aにあるように、

「複数行編集ボックス」コントロール(Body)のすべてのプロパテ「multipleSeparator」に式で「return "\n"」と書きました。

<xp:inputTextarea style="width:652.0px;height:69.0px"
                    id="Body" value="#{document1.Body}">

                    <xp:this.multipleSeparator><![CDATA[#{javascript:return "\n"}]]></xp:this.multipleSeparator>
                </xp:inputTextarea>

結果、ビュー上の列の値は、改行の代わりに「,」(カンマ)が入って表示されてしまいました。

 

カンマではなく、改行で表示させるにはどうしたら良いでしょうか?

以下、ビューコントロールのコードです。

<xp:viewPanel rows="30" var="rowdata"
                                    id="viewPanel1" viewStyle="width:100%"
                                    showColumnHeader="false">

                                    <xp:this.data>
                                        <xp:dominoView var="rowdata"
                                            databaseName="develope\mone_bunsyo.nsf"
                                            viewName="Syuryou_V">
                                        </xp:dominoView>
                                    </xp:this.data>
                                    <xp:viewColumn id="viewColumn4"
                                        style="width:3px;white-space:nowrap;font-size:11pt"
                                        columnName="Category">
                                        <xp:this.facets>
                                            <xp:viewColumnHeader
                                                xp:key="header" id="viewColumnHeader4" value="Category">
                                            </xp:viewColumnHeader>
                                        </xp:this.facets>
                                    </xp:viewColumn>
                                    <xp:viewColumn columnName="Subject"
                                        id="viewColumn1"
                                        style="width:200px;font-size:12pt;color:rgb(0,0,0);background-color:rgb(234,255,255);text-align:center">
                                        <xp:viewColumnHeader value="件名"
                                            id="viewColumnHeader1">
                                        </xp:viewColumnHeader>
                                    </xp:viewColumn>
                                    <xp:viewColumn id="viewColumn2" style="width:600px;font-size:12pt" columnName="Body">
                                        <xp:viewColumnHeader
                                            id="viewColumnHeader2" value="本文">
                                        </xp:viewColumnHeader>
                                    </xp:viewColumn>
                                    <xp:viewColumn id="viewColumn3"
                                        style="font-size:12pt;color:rgb(0,0,255)"
                                        contentType="html">

                                        <xp:this.value><![CDATA[#{javascript:var url= rowdata.getDocument().getItemValueString("Link");
var LinkName=rowdata.getDocument().getItemValueString("LinkName");
if(url.isEmpty()){return "URLなし";}else{return "<a href='"+url+"'target' _blank'>"+LinkName+"</a>";}}]]></xp:this.value>
                                        <xp:viewColumnHeader
                                            id="viewColumnHeader3">
                                        </xp:viewColumnHeader>
                                    </xp:viewColumn>
                                </xp:viewPanel>

 

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:2020/03/19 11:26:46

回答・コメント

いいね!数

0

xp:inputTextarea の multipleSeparator は フィールドの複数値を制御する際に利用しますので今回は使えません。

まず、Body フィールドが持つ値はあくまで改行コードを持ったコンテンツであり複数値ではないと仮定して話をすすめます。

ビューの中でコンテンツの改行コードをXPAGESでも改行して表示するには inputTextarea ではなく計算結果フィールド(xp:text)を使い、以下のように改行コードをHTMLの改行コードに置換する方法をお試しください。

	<xp:text escape="false" id="computedField1"
		value="#{document1.Detail}">
		<xp:this.converter>
			<xp:customConverter getAsObject="#{javascript:value}">
				<xp:this.getAsString><![CDATA[#{javascript:value.replace("\n", "<br />")}]]></xp:this.getAsString>
			</xp:customConverter>
		</xp:this.converter>
	</xp:text>
回答日時:2020/03/19 18:36:08

いいね!数

0

こんにちわ。

列にhtmlでリンクを作る方法の応用で、[Body]の値を取り出して、Tatsukiさんの書かれてる、Replceで改行コードを<br>に置き換える方法でとりあえずは動くんじゃないかとおもいます。

ただ、Bodyに'<'などのhtmlのタグとみなせる文字が紛れ込んでるとうまくいかないかも。

<br>の置き換える前に、<>などを%gtや%ltに変換しておきましょう。

html エスケープ、などで検索すると使えそうな関数の作り方が出てくると思います。

/Yac

回答日時:2020/03/20 7:30:02

いいね!数

0

Tatsukiさん、yac4423さん、ご回答をありがとうございます。

Body フィールドはユーザーに入力をしてもらいたいフィールドなので計算結果にはできないの困っております。

 inputTextarea のままで multipleSeparator は外したのですが、そうなるとフォームの編集画面では改行されていても

ビューの列に表示するときには「カンマ」も表示されなくなってしまいました。

この状態で以下を試してみました。

①ビューの列のデータを「計算結果の値」にして以下のコードを記述。

var value= rowdata.getDocument().getItemValueString("Body");
value.replace("\n", "<br />")

②列の値を「HTML」にする

 

結果、以下のように改行されませんでした。

どこかやり方が間違っているのでしょうか?

ご指摘いただければ助かります。

よろしくお願いします。

 

回答日時:2020/03/23 11:09:28

いいね!数

0

Bodyフィールドの値を引き継ぐ計算結果フィールドを作ってからTatsukiさん、yac4423さんの

ご指摘の方法でやったところうまく行きました!

回答日時:2020/03/23 11:27:25

いいね!数

0

キャッシュの問題だったようで、計算結果フィールドにしない設定( inputTextarea)で、yac4423さんの

方法で上手く行きました。

ありがとうございました!

回答日時:2020/03/23 11:35:51