2

大量のテキスト (約 5000 文字のテキスト) を含む outputLabel があります。outputLabel は行が約 200px の後に新しい行を追加する必要があります。これは可能ですか?

<p:outputLabel value="#{object.body}" />
<p:outputLabel value="#{object.body}" style="width: 200px" />

このコードは機能しません:

public String getBodyWithLineBreaks(){
    return body.replaceAll("(.{100})", "$1<br/>");
}

このメソッドは単語が終了したかどうかを確認せず、100 文字目で新しい行を開始するだけなので、解決策にもなりません。

いくつかのコード:

<p:dataTable id="dataTable" var="object" value="#{notificationOverview.objects}">

     <!--Some more columns...-->  

    <p:rowExpansion>  
        <h:panelGrid id="display" columns="2" cellpadding="4" style="width:300px;"  
                                                 styleClass=" ui-widget-content grid">  
        <f:facet name="header">Notification Information</f:facet>
        <h:outputText value="Sender:"/>
        <h:outputText value="#{object.sender.username}"/>

        <h:outputText value="Time send:"/>
        <h:outputText value="#{object.dateSend}">
            <f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss"/>
        </h:outputText>

   <h:outputText value="Title:"/>
   <h:outputText value="#{object.title}"/>
</h:panelGrid>

<br/><br/>

<div style='width: 200px;'>
   <h:outputText value="#{object.body}" />
</div>
</p:rowExpansion>
</p:dataTable>
4

1 に答える 1

6

は、デフォルトでインライン要素<p:outputLabel>である HTML 要素を生成します。インライン要素のサイズを設定することはできません。ブロック要素にのみ設定できます。<label>

display: block1 つの方法は、スタイルに追加することです。

<p:outputLabel value="#{object.body}" style="display: block; width: 200px;" />

さらに、これが<p:dataTable>セル内にあり、デフォルトでその CSSwhite-spaceプロパティが に設定nowrapされている場合は、設定を に戻す必要がありますnormal。これは同じコンポーネントに設定できますが、親<p:column>自体に設定することをお勧めします。

<p:column style="white-space: normal;">

注: グッド プラクティスの一環として、 よりも優先する必要がありstyleClassますstyle


具体的な問題とは関係ありませんが、HTML<label>要素は、属性によって識別される入力要素にラベルを付けるように設計されていforます。つまり、クリックすると、関連する入力要素がフォーカスを取得します (そして、チェックボックス/ラジオボタンが選択されます)。検証が実行されると、入力要素を識別するためにラベルが使用されます。ただし、ラベル要素内に 5000 文字を表示しようとしているという事実は、実際のラベルとして使用すると完全にユーザーフレンドリーではありません。実際には、「プレーン テキスト」を表示するという間違った目的でラベルを悪用していることを示唆しています。<h:outputText>代わりに使用する必要があります。<span>これにより、デフォルトでインライン要素でもあるHTML 要素が生成されます。したがって、上記の答えはそれにも当てはまります。

<h:outputText value="#{object.body}" style="display: block; width: 200px;" />
于 2013-05-02T21:07:26.503 に答える