web-dev-qa-db-ja.com

文字列内の長い単語のh:outputText改行

JSF(2.0)のh:outputTextに、文字列内の非常に長い単語に改行(またはさらに良い:「-」のようなカスタム文字列)を挿入するように指示する方法はありますか?私の問題は、スペースのない文字列内に非常に長い単語があると、データテーブル(PrimeFaces)の幅が広すぎることです。長いテキストの「通常の」単語がある場合に機能し、次の単語が次の行に出力されます。

コンバーターを使用することもできますが、これは、文字列内の長い単語を探して、テキストを表示するたびにそれらを切り取らなければならないことを意味します。これは、少量のデータに対しては何らかの形で機能しますが、データベースが大きくなると(そしてそうなると)、多くの処理能力が必要になります。

また、データベースに挿入する前に文字列の長大語をスキャンすることもできます。つまり、文字列を1回処理するだけで済みますが、必要になった場合に元の文字列を完全に再構築することもできません。

誰かがこれについて何か意見がありますか?

よろしくお願いします、ロバート

13
Robert M.

CSSを設定 Word-wrap 問題の要素のプロパティをbreak-Word

<h:outputText styleClass="someClass" />

.someClass {
    Word-wrap: break-Word;
}
18
BalusC
 <h:outputText value="Very Wordy&lt;br /&gt;Table Column&lt;br /&gt;Heading" escape="false" />  

出力

Very Wordy
Table Column
Heading
11
Jigar Joshi

これは2つのステップで達成できます

1)スタイルをtable-layoutとして適用:panelGridに修正

例:<h:panelGrid style="table-layout:fixed;">

2)次に、以下のように<h:outputText />にWord-wrapbreak-Wordのスタイルを適用します。

例:<h:outputText style="Word-wrap:break-Word;">

お役に立てれば。

4
Pramod Kankure

文字列に非常に長い単語がある場合は、次のようにWord-break: break-all;を使用できます。

<h:outputText value="111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" style="Word-break: break-all;"/>

しかし、CSS3が必要でした。リンク: ワードブレイク

2
Silence

h:outputTextではなくh:inputTextareaを使用できます。読み取り専用属性をtrueに設定し、次のように境界線を削除することを忘れないでください。

<h:inputTextarea  rows="10" cols="50" readonly="true" value="multiline String"  style="border-color: white"  />