下面是一個使用readmore可以作爲一個起點,任何人都希望像這樣迅速的複合成分。這裏有一些與您無關的特性,可能需要改進和自定義(硬編碼style
,硬編碼選項到readmore()
函數等)。歡迎提出改進建議。
參數
- 值(字符串,必需):中顯示的文本。預計是空行的純文本。
- cols(integer,default = 40):將包含
div
的寬度限制爲的列數。如果小於或等於0,則不要限制寬度。
- readmore(布爾值,默認=假):是否使用Readmore功能。
- textonly(boolean,default = false):默認情況下,組件爲包含
div
的分配一個「只讀」類。將textonly
設置爲true不會將「只讀」類分配給包含div
的類。
位置:在/resources/{samplelibrary}/readOnlyTextArea.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:composite="http://java.sun.com/jsf/composite"
>
<composite:interface>
<composite:attribute name="cols" default="40" type="java.lang.Integer"/>
<composite:attribute name="value" required="true"/>
<composite:attribute name="readmore" default="false" type="java.lang.Boolean"/>
<composite:attribute name="textonly" default="false" type="java.lang.Boolean"/>
</composite:interface>
<composite:implementation>
<h:outputScript library="samplelibrary" name="readmore.min.js" target="head"/>
<div id="#{cc.clientId}_div" class="#{cc.attrs.textonly?'':'readonly'}"
style="white-space: pre-wrap; #{cc.attrs.readmore ? '' : 'min-height: 1.3em;'} #{(cols gt 0) ? ('width: ' + (cc.attrs.cols/2.09) + 'em; padding: 2px 2px 2px 2px;') : ''}">
<h:outputText value="#{cc.attrs.value}"
/></div>
<ui:fragment rendered="#{cc.attrs.readmore}">
<script type="text/javascript">
$(window).ready(function() {
var comps = $(document.getElementById('#{cc.clientId}_div'));
comps.readmore({speed:300,collapsedHeight:54});
});
</script>
</ui:fragment>
</composite:implementation>
</html>
這裏是爲readonly
CSS類的一些CSS:
.readonly
{
border: 1px solid #999;
background-color: #eee;
color: #333;
}
「但是,爲什麼你需要一個JSF組件?「 (笑話)因爲:LAZY!(/笑話)確實,Readmore.js可能是一個很好的解決方法。如果我創建自己的組件,我總是可以輕鬆地更改實現。我繼續前進,在複合組件中使用Readmore.js - 請參閱其他答案。 – Pixelstix