2013-05-02 56 views
2

我有一個包含大量的文本(文本的約5000字)outputLabel,該outputLabel必須添加一個新行之後的行約爲200像素,這可能嗎?強制斷行OutputLabel

<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> 

回答

6

<p:outputLabel>生成HTML <label>元件,其是由一個缺省inline element。您不能設置內嵌元素的尺寸。您只能在block element上設置它。

一種方法是將display: block添加到樣式中。

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

此外,考慮到這是一個<p:dataTable>細胞,它具有默認的CSS white-space屬性設置爲nowrap裏面,你需要將其設置回normal。這可以在同一組件上進行設置,但最好是要在父<p:column>本身設置:

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

注:作爲一個很好的做法的一部分,你應該更喜歡styleClass超過style


無關到混凝土問題,HTML <label> element被設計來標記其通過for屬性標識輸入元件。即當你點擊它,相關的輸入元素獲取焦點(和一個複選框/單選按鈕獲得選擇)。當執行驗證時,該標籤用於標識輸入元素。但是,你要顯示一個標籤元素,作爲一個真正的標籤使用,這是完全用戶不友好內5000個字符的事實,意味着你實際上濫用標籤顯示「純文本」錯誤的目的。您應該使用<h:outputText>。這會生成一個HTML <span>元素,默認情況下它也是一個內聯元素。所以上面的答案也適用於此:

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