web-dev-qa-db-ja.com

JSF ELでList#size()の値を表示するにはどうすればよいですか?

メソッドの戻り値をJSFコンポーネントにバインドする方法があるかどうか知りたいのですが。私は自分自身をよりよく説明します。私がこのようなクラスを持っているとしましょう:

public class Document {
   private List<Attachment> attachments;
   //getter and setter here
}

このクラスは、currentDocumentというプロパティに登録されたマネージドBeanを介してjsfに公開され、このようにjsfで使用されます。

<h:outputText value="#{myManagedBean.currentDocument.attachment.size}" />

これは正しくありません、私は知っています。しかし、これを行う正しい方法は何ですか? Documentクラスに属性を作成し、たとえばnumberOfAttachmentsを作成してそれにバインドする必要がありますか、それともメソッドの戻り値に直接バインドする方法がありますか?

21
themarcuz

EL 2.2対応コンテナ(Tomcat 7、Glassfish 3、JBoss AS 6以降、すべてServlet 3.0を実装)を実行している場合、またはJBoss ELを使用している場合は、ELによってゲッター以外のメソッドを呼び出すことができるはずです。

_<h:outputText value="#{myManagedBean.currentDocument.attachment.size()}" />
_

別の方法は、 [〜#〜] jstl [〜#〜]fn:length():を使用することです。

_<html xmlns:fn="http://Java.Sun.com/jsp/jstl/functions" ...>
...
<h:outputText value="#{fn:length(myManagedBean.currentDocument.attachment)}" />
_

何らかの理由でそれが不可能な場合は、EL関数を自分で作成するのが最善の策です。

_<h:outputText value="#{my:size(myManagedBean.currentDocument.attachment)}" />
_

または、それを正確に返す_#{myManagedBean}_に追加のgetterメソッドを追加します。

_<h:outputText value="#{myManagedBean.currentDocumentAttachmentSize}" />
_

参照:

27
BalusC