ObA*_*bAt 2 css jsf line-breaks primefaces
我有一个outputLabel,其中包含大量文本(大约5000个字符的文本),outputLabel必须在行约200px之后添加一个新行,这可能吗?
<p:outputLabel value="#{object.body}" />
<p:outputLabel value="#{object.body}" style="width: 200px" />
Run Code Online (Sandbox Code Playgroud)
此代码不起作用:
public String getBodyWithLineBreaks(){
return body.replaceAll("(.{100})", "$1<br/>");
}
Run Code Online (Sandbox Code Playgroud)
它也不是一个解决方案,因为这个方法不会查看单词是否完成,它只是在第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>
Run Code Online (Sandbox Code Playgroud)
所述<p:outputLabel>产生一HTML <label>元件,其是通过默认的内联元件.您无法设置内联元素的尺寸.您只能在块元素上设置它.
一种方法是增加display: block风格.
<p:outputLabel value="#{object.body}" style="display: block; width: 200px;" />
Run Code Online (Sandbox Code Playgroud)
此外,鉴于这是在一个<p:dataTable>单元格内,默认情况下其CSS white-space属性设置为nowrap,您需要将其设置为normal.这可以在同一个组件上设置,但最好是在父组件上设置<p:column>:
<p:column style="white-space: normal;">
Run Code Online (Sandbox Code Playgroud)
注:作为一个很好的做法的一部分,你应该更喜欢styleClass了style.
与具体问题无关,HTML <label>元素用于标记由for属性标识的输入元素.即,当您单击它时,关联的输入元素将检索焦点(并选中复选框/单选按钮).执行验证时,标签用于标识输入元素.但是,您尝试在标签元素中显示5000个字符这一事实,这在用作真实标签时完全是用户不友好的,这表明您实际上滥用标签是出于显示"纯文本"的错误目的.你应该使用<h:outputText>而不是.这会生成一个HTML <span>元素,默认情况下也是一个内联元素.所以上面的答案也适用于此:
<h:outputText value="#{object.body}" style="display: block; width: 200px;" />
Run Code Online (Sandbox Code Playgroud)