自定义JSF组件属性列表

自定义JSF组件属性列表,jsf,attributes,custom-controls,Jsf,Attributes,Custom Controls,我正在编写一个自定义JSF组件,它将为一组指定的图像呈现图像转换。组件使用的图像列表将由组件的用户指定 主组件将进行呈现,并且生成的标记不是html 我只是在学习JSF,我想知道是否有一个既定的模式可以将参数属性列表传递给自定义组件: 用户是否希望传递如下属性: 然后我可以使用转换器或 这会更自然吗 在我的例子中,主要的imageComponent将执行所有的渲染,所以我只想找出将属性列表传递给组件的自然方式 <i:imageComponent width="480" h

我正在编写一个自定义JSF组件,它将为一组指定的图像呈现图像转换。组件使用的图像列表将由组件的用户指定

主组件将进行呈现,并且生成的标记不是html

我只是在学习JSF,我想知道是否有一个既定的模式可以将参数属性列表传递给自定义组件:

用户是否希望传递如下属性:

然后我可以使用转换器或 这会更自然吗




在我的例子中,主要的imageComponent将执行所有的渲染,所以我只想找出将属性列表传递给组件的自然方式


<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/>

此设计具有局限性,因为它要求组件使用者定义固定数量的包含图像。至少在第一种设计中,可以使用EL表达式将ImageURL和imageCaptions属性绑定到动态值


考虑为您的组件定义一个接口,它可以用来迭代这些值。例如,(基础组件类型)使用来处理其内容-有关详细信息,请参阅

这可能导致标签设计如下:

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

这种方法需要更少的视图混乱


代替模型,考虑一个中继器设计(它将依赖于用户/开发人员提供适当的绑定类型):



这种方法的优点是在后端不需要任何特殊类型。

我不介意中继器的设计,但这是否意味着我还必须定义一个“映像”组件?我遇到的问题是,主“imageComponent”渲染器需要执行所有渲染,因此它需要所有信息,包括图像标记中指定的信息。此外,图像标记将不需要进行渲染-这是典型的组件吗?具有不渲染的组件是可以的(请参见h:column)。另请参见UIComponent.getRendersChildren:
<i:imageComponent width="480" height="320"
        value="#{backingBean.someIterable}" var="img" >
    <i:image href="#{img.href}" caption="#{img.caption}"/>
<i:imageComponent/>