2011-02-06 2 views
1

JSF 2에서는 facelets이 선호되는 뷰 선언 언어라는 것을 알고 있습니다.JSF 뷰 계산

JSP to jsf가 더 이상 사용되지 않습니까?

어쨌든 Datatable을 사용할 수 없도록 특별한 레이아웃을 만들어야합니다. 대신 필자는 기사 모음을 누락시키는 열로 사용하는 6 개의 div가 있습니다. 내 문제가이 컬렉션 A를 주입, 나는 JSF 복합 구성 요소를 가지고있다 :

List<Article> 

객체입니다.

구성 요소는 컬렉션의 크기를 각 열에 대해 동일한 조각으로 나누어야합니다. 그런 다음 appropiate는 오프셋과 크기 세트

<ui:repeat></ui:repeat> 

그래서 내가 그래서 그 오프셋과 크기 있도록 계산합니까 방법이

<!-- INTERFACE --> 
<cc:interface> 
    <cc:attribute name="featuredArticles" required="true" type="java.util.List;" /> 
</cc:interface> 

<!-- IMPLEMENTATION --> 
    <cc:implementation> 
    <div class="col"> 
     <ui:repeat value="#{cc.attrs.featuredArticles}" var="art" offset="??" size="??"> 
      <mycomps:article art="#{art}" /> 
     </ui:repeat> 
    </div> 
    <div class="col"> 
     <ui:repeat value="#{cc.attrs.featuredArticles}" var="art" offset="??" size="??"> 
      <mycomps:article art="#{art}" /> 
     </ui:repeat> 
    </div> 
    <div class="col"> 
     <ui:repeat value="#{cc.attrs.featuredArticles}" var="art" offset="??" size="??"> 
      <mycomps:article art="#{art}" /> 
     </ui:repeat> 
    </div> 
    <div class="col"> 
     ...same here... 
    </div> 
    <div class="col"> 
     ...same here... 
    </div> 
</cc:implementation> 

와 끝까지 각 컬렉션의 일부에 대한 각 열을 반복? 아니면 더 좋은 방법이 있을까요?

+0

facelet 기술은 JSF 용 JSP보다 잘 작동합니다. –

+0

JSF 2.0에서 질문의 첫 번째 부분에 대답하려면 JSP가 사용되지 않습니다. 위키피디아 : '처음에는 Facelets가 JSF 1.1과 JSF 1.2를위한 별도의 대체 뷰 선언 언어로 사용되었습니다.이 언어는 JSP를 기본보기 선언 언어로 사용했습니다. JSF 2.0부터 Facelets는 JSF 전문가 그룹에 의해 기본 뷰 선언 언어로 승격되었습니다. JSP는 기존의 fallback [2] [3]으로 사용되지 않습니다. –

+0

은 어떤 시점에서 jsp가 완전히 사용되지 않음을 의미합니까? 그것은 jsf의 기본 VDL로 사용되지 않지만, facelets로 대체되면 완전히 폐기해야합니까? – arg20

답변

3

fn:length으로 컬렉션의 크기를 얻을 수 있으며 EL에 기본 산술 연산자가 있습니다.

<ui:composition xmlns:fn="http://java.sun.com/jsp/jstl/core"> 
    ... 
    <ui:param name="size" value="#{fn:length(featuredArticles)/6}" /> 
    ... 
    <ui:repeat size="#{size}"> 
    ... 
</ui:composition> 

업데이트 : 까다로운 반올림에있다. 오래된 JSP에서는 var 속성으로 내보낼 수있는 JSTL <fmt:formatNumber>을 뷰에서 바로 표시하는 대신 사용할 수 있습니다.

<fmt:formatNumber var="size" value="${fn:length(featuredArticles)/6}" pattern="0" /> 

그러나 JSTL fmt

은 Facelets의에서 사용할 수 없습니다.

해키 한 방법은 fn:substringBefore을 사용하여 분수를 나누는 것입니다.

<ui:param name="size" value="#{fn:substringBefore(fn:length(featuredArticles)/6, '.')}" /> 

하지만 항상 내림합니다.

가장 좋은 방법은 맞춤 EL 기능을 만드는 것입니다. 예를 들어 this answer에서 찾을 수 있습니다. JSF 2.0의 경우 더 이상 사용되지 않는 <param-name>facelets.LIBRARIES</param-name><param-name>javax.faces.FACELETS_LIBRARIES</param-name>으로 대체하기 만하면됩니다. 마지막으로 당신은처럼 겁니다 : 완전히 다른 대안으로

<ui:param name="size" value="#{x:roundUp(fn:length(featuredArticles)/6)}" /> 

은 또한 생성자, 관리 빈의 초기화 또는 게터이 일을 할 수 있습니다.

+0

BalusC 남자 당신은 모든 것을 알고 있습니다. 어쨌든 내가 사단을 반올림 할 수 있니? 둥근 수가 아닌 경우 float 값을 더하여 반환합니다. 을 3.7 번 반복 할 수 없습니다. – arg20