gpt4 book ai didi

jsf - 自定义 JSF 组件属性列表

转载 作者:行者123 更新时间:2023-12-02 00:45:26 25 4
gpt4 key购买 nike

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

主要组件将进行渲染,生成的标记不是 html。

我刚刚开始学习 JSF,我想知道是否存在将参数属性列表传递给自定义组件的既定模式:

用户是否希望传递这样的属性:
<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/>

在我的例子中,主要的 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/>

这种设计是有局限性的,因为它要求组件消费者定义固定数量的包含图像。至少在第一个设计中,imageUrlsimageCaptions 属性可以使用 EL 表达式绑定(bind)到动态值。


考虑定义一个 model对于您的组件 - 一个可用于迭代值的接口(interface)。例如,UIData (基础组件类型 h:dataTable )使用 DataModel处理其内容 - 请参阅 spec了解详情。

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

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

这种方法需要在 View 中减少困惑。


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

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

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

关于jsf - 自定义 JSF 组件属性列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/840830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com