2009-05-08 6 views
3

지정한 이미지 세트에 대한 이미지 전환을 렌더링하는 사용자 지정 JSF 구성 요소를 쓰고 있습니다. 구성 요소에서 사용할 이미지 목록은 구성 요소 사용자가 지정합니다.사용자 지정 JSF 구성 요소 특성 목록

주 구성 요소는 렌더링을 수행하며 결과 마크 업은 html이 아닙니다.

난 그냥 JSF를 배우는 중이에요 및 사용자 지정 구성 요소에 매개 변수의 속성 목록을 전달하기위한 설립 패턴이 궁금 해서요 :

사용자가 다음과 같은 속성을 통과 할 것으로 예상된다이 :
<i:imageComponent width="480" height="320" imageUrls="img1Url1, imgUrl2" imageCaptions="imageCaption1, imageCaptions2"/>

그런 다음이 속성을 변환기를 사용하여 서버 목록으로 변환하거나 더 자연스럽지 않습니까? 내 경우 <i:image id="im2" href="url2" caption="caption2"/>
<i:imageComponent/>

<i:imageComponent width="480" height="320">
<i:image id="im1" href="url1" caption="caption1"/>
모든 렌더링을하고있을 것입니다 주요 imageComponent 그래서 난 그냥 전달하는 자연적인 방법이 무엇인지 파악하려면 구성 요소에 대한 속성 목록.

답변

3
<i:imageComponent width="480" height="320" imageUrls="img1Url1, imgUrl2" 
    imageCaptions="imageCaption1, imageCaptions2"/> 

이 디자인은 두 개의 별도 목록을 동기화해야하기 때문에 오류가 발생하기 쉽습니다.

<i:imageComponent width="480" height="320"> 
    <i:image id="im1" href="url1" caption="caption1"/> 
    <i:image id="im2" href="url2" caption="caption2"/> 
<i:imageComponent/> 

이 설계는 구성 요소 소비자가 고정 된 수의 포함 된 이미지를 정의해야하기 때문에 제한적입니다. 적어도 첫 번째 디자인에서는 imageUrlsimageCaptions 속성을 EL 표현식을 사용하여 동적 값에 바인딩 할 수 있습니다. 이 값을 반복하는 데 사용할 수있는 인터페이스를 -


은 구성 요소에 대한 model 정의에 대한 생각. 예를 들어 UIData (구성 요소 유형이 h:dataTable 인 경우)은 DataModel을 사용하여 내용을 처리합니다. 자세한 내용은 spec을 참조하십시오.

이이 같은 태그 디자인을 초래할 수 :

<i:imageComponent width="480" height="320" 
     value="#{backingBean.imageModel}" /> 

이러한 접근 방식은보기에 덜 혼란을 필요로한다.

<i:imageComponent width="480" height="320" 
     value="#{backingBean.someIterable}" var="img" > 
    <i:image href="#{img.href}" caption="#{img.caption}"/> 
<i:imageComponent/> 

이 방법은 특별한 형식을 요구하지 않는 장점이 있습니다 대신 모델의


, (적절한 바인딩 유형을 제공하는 사용자/개발자에 의존하는 것) 리피터 디자인을 고려 백엔드에서

+0

리피터 디자인에 신경 쓰지는 않지만 "이미지"구성 요소를 정의해야한다는 의미는 아닙니다. 문제는 메인 "imageComponent"렌더러가 모든 렌더링 작업을 수행해야하므로 이미지 태그에 지정된 정보를 포함하여 모든 정보가 필요하다는 것입니다. 또한 이미지 태그에는 렌더링이 없습니다. 일반적인 구성 요소입니까? –

+0

렌더링되지 않는 구성 요소가 있으면 OK입니다 (h : 열 참조). 또한 UIComponent.getRendersChildren을 참조하십시오. http://java.sun.com/javaee/5/docs/api/javax/faces/component/UIComponent.html#getRendersChildren() – McDowell