好吧,也许我的JSF复合组件完全错误(不应该用于我的目的) - 或者我还没有完全理解它们......
我要做的是:创建一个复合组件,它将呈现一些Html标记(使用标准的JSF标记)。并且这些Html标记的属性是根据在组件的接口中定义的参数计算的(如required = true)。这些属性的计算将在组件jar中的简单辅助bean中进行。所以facelet代码如下所示:
<cc:interface>
<cc:attribute name="userId" required="true"/>
<cc:attribute name="imageType" required="true"/>
</cc:interface>
<cc:implementation>
<h:graphicImage value="#{imageBean.getImageUrl(cc.attrs.userId, cc.attrs.imageType)}"
height="#{imageBean.getImageHeightAsPixels(cc.attrs.imageType)}"
width="#{imageBean.getImageWidthAsPixels(cc.attrs.imageType)}"/>
</cc:implementation>
除非将它放入ui中的使用页面,否则这个东西可以正常工作:像这样重复:
<ui:repeat value="#{usersBean.users}" var="user">
<myCC:image userId="${user.id}" imageType="FULL_56"/>
</ui:repeat>
现在,JSF会抱怨我没有传递必需参数的值。因此它现在看起来因为组件接口中定义的属性仅可用作“静态属性”。不能使用仅在调用应用程序阶段之后正确计算的EL表达式的属性。
这种解释是否正确?如果是,是否还有其他方法可以将“动态”数据传递到组件中?或者我实际上完全滥用复合组件?也许应该更简单?
感谢您的任何见解:-) 托本