문제

어떻게 나의 길이 ArrayList 를 사용하여 JSF EL 식?

#{MyBean.somelist.length}

이 작동하지 않습니다.

도움이 되었습니까?

해결책

예, Java API Creation Committee의 일부 천재는 특정 수업이 있지만 size() 회원 또는 length 속성, 그들은 구현하지 않을 것입니다 getSize() 또는 getLength() JSF 및 대부분의 다른 표준에 필요한 경우 원하는 것을 할 수 없습니다.

이 작업을 수행하는 몇 가지 방법이 있습니다.

하나 : 길이를 반환하는 콩에 함수를 추가하십시오.

In class MyBean:
public int getSomelistLength() { return this.somelist.length; }

In your JSF page:
#{MyBean.somelistLength}

두 사람 : 페이스 렛을 사용하고 있다면 (오, 신, 왜 페이스를 사용하지 않는가!) FN 네임 스페이스를 추가하고 길이 함수를 사용할 수 있습니다.

In JSF page:
#{ fn:length(MyBean.somelist) }

다른 팁

당신은 size ()를 의미하지 않습니까?

#{MyBean.somelist.size()}

나를 위해 일합니다 (Jboss el Extensions가있는 Jboss Seam 사용)

메모: 이 솔루션은 이전 버전의 JSTL에 더 좋습니다. 1.1보다 큰 버전의 경우 사용 권장합니다 fn:length(MyBean.somelist) 제안한대로 빌 제임스.


이 기사 다른 가능한 솔루션을 포함한 몇 가지 자세한 정보가 있습니다.

문제는 목록의 크기 메소드 (유효한 링크 사전 목록 메소드)를 호출하려고하지만 Javabeans 호환 getter 메소드는 아니므로 Expression List.size-1을 평가할 수 없다는 것입니다.

이 딜레마를 다루는 두 가지 방법이 있습니다. 먼저 다음과 같은 RT 코어 라이브러리를 사용할 수 있습니다.

<c_rt:out value='<%= list[list.size()-1] %>'/>

둘째, JSP 페이지에서 Java 코드를 피하려면 목록이 포함 된 간단한 래퍼 클래스를 구현하고 Javabeans 호환 getter 메소드로 목록의 크기 속성에 액세스 할 수 있습니다. 그 콩은 Listing 2.25에 나열되어 있습니다.

C_RT 방법의 문제점은 요청에서 변수를 수동으로 가져와야한다는 것입니다. 그렇지 않으면 인식하지 않기 때문입니다. 이 시점에서 당신은 기능적으로 내장해야 할 것에 대한 많은 코드를 넣고 있습니다. 이것은 거대한 EL의 결함.

나는 "래퍼"메소드를 사용하여 결국 수업이 있습니다.

public class CollectionWrapper {

    Collection collection;

    public CollectionWrapper(Collection collection) {
        this.collection = collection;
    }

    public Collection getCollection() {
        return collection;
    }

    public int getSize() {
        return collection.size();
    }
}

아직 아무도 언급하지 않은 세 번째 옵션은 목록 크기를 모델에 넣는 것입니다 (MVC를 사용한다고 가정)을 별도의 속성으로 생각합니다. 따라서 귀하의 모델에서는 "내성 주의자"와 "내성적 규모"를 가질 수 있습니다. 이 문제를 해결하는 가장 간단한 방법 일 수 있습니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>

화면에는 테이블 크기가 표시됩니다

예시: Table Size = 5

결국 사용하여 EL 언어를 확장 할 수 있습니다. El Functor, 매개 변수가있는 경우에도 Java Beans 메소드를 호출 할 수 있습니다 ...

후 7 년...이 facelets 솔루션이 아직도 잘 작동으로 저를 위해 사용자 jsf

네임스페이스가 포함되로 xmlns:fn="http://java.sun.com/jsp/jstl/functions"

사용 엘로 #{fn:length(myBean.someList)} 예를 들어 사용하는 경우에 jsf ui:조각 아래 예에서 잘 작동합

<ui:fragment rendered="#{fn:length(myBean.someList) gt 0}">
    <!-- Do something here-->
</ui:fragment>

다음 el을 사용하여 길이를 얻을 수 있습니다.

#{bean.list.size ()}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top