私はjsfアプリケーションに取り組んでいます。私は dataTable を持っています。1 つの列を使用して Pojo の説明を表示します。
問題は次のとおりです。この説明は長すぎて、dataTable が完全に読み取り可能ではありません。次のように、この dataTable の説明列にレンダリングする文字数を制限する方法はありますか: Description desc desc...
JSF 2 を使用している場合は、OmniFaces プロジェクトの:abbreviate の機能を使用できます。
JARファイルをWEB-INF/lib
に配置し、それに応じて XHTML ファイルで名前空間を次のように構成します。
<html ... xmlns:of="http://omnifaces.org/functions">
次に、次のように任意の String プロパティで使用できます。
<h:column>
<h:outputText value="#{of:abbreviate(someBean.myproperty, 20)}" />
</h:column>
ここでデモを参照してください。
データベースから文字列を取得する場合は、Substring SQL 関数を使用して、DB から取得するときにデータを直接切り捨ててみてください。
そうでない場合は、以下の解決策を試すことができます。
使用している POJO クラス ( と呼びますMyPOJO
) に、 と呼ばれる String 属性が含まれているとしますdescription
。これで、DataTable はそのオブジェクトの List または Map などにリンクされます"ArrayList<MyPOJO> theList"
。
できることは、同じクラスに別の属性を持つことですMyPOJO
。String descriptionTruncated
その String の getter メソッドとして as および in で次のように記述することを宣言します。
public String getDescriptionTruncated() {
if (this.description == null) {
return description;
} else if (this.description.length() <= 20 ) {
return description;
} else {
return description.substring(0,19);
}
}
ここでは、必要な長さが 20 であると仮定します。
そして、Datatable 参照で、新しく作成された文字列を次のようにします。
<h:datatable ... var="pojoObj">
<h:column>
<h:outputText value="#{pojoObj.descriptionTruncated}" />
</h:column>
それが役立つことを願っています。