在实现扩展某些现有组件的自定义facelets组件时,您的自定义组件接受与要扩展的组件相同的属性是很常见的。 例如,扩展h:inputText可以如下:
<ui:composition>
<custom:decorate styleClass="input">
<h:inputText id="#{id}" value="#{value}" required="#{required}"
styleClass="#{styleClass}" disabled="#{disabled}" rendered="#{rendered}"
converterMessage="#{converterMessage}"
requiredMessage="#{requiredMessage}"
validatorMessage="#{validatorMessage}" onchange="#{onchange}"
style="#{style}">
<ui:insert/>
</h:inputText>
</custom:decorate></ui:composition>
目标是允许组件的客户端以与扩展组件相同的方式使用扩展版本。 上面的例子有以下差距:
有一些简单直接的解决方案(例如使用c:if,c:when等来处理1-3;传递bean和actionMethodName或实现动作映射器组件来处理4),但是当属性数量时很大,组件的代码变成了意大利面条代码的地狱。
也许已经有一些可用于JSF 1.2的可靠解决方案? 对于我来说,如果能够获得有关如何实施此类解决方案或解决方案的一部分的好建议,我将会非常有用。