을 얻으려면 어떻게 해야 할 길이의 목록에서 JSF 식 언어?
문제
어떻게 나의 길이 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 ()}