2011-11-12 53 views
6

我创建了一个复合材料部件是这样的:为什么复合组件“渲染”属性抛出IllegalArgument异常?

<cc:interface>   
    <cc:attribute name="value" 
        required="true" /> 
    <cc:attribute name="rendered" 
        displayName="True to render" 
        default="true" /> 
</cc:interface> 

当我调用此组件,我得到一个IllegalArgumentException。我可以将呈现的名称改为别的东西(如doIt),然后它可以正常工作。

呈现属性保留莫名其妙?我希望我的复合组件看起来像“常规”的JSF组件。

这是与Mojarra。

+0

未来,如果问题不是Mojarra特定的,您不需要明确标记'[mojarra]'。例如,当您尝试使用MyFaces时,您会遇到完全相同的问题。只要在问题中提到JSF impl/version就足够了。 – BalusC

+0

我把Mojarra放在了那里,因为我认为它可能是一个Mojarra错误。但有一点要说。 – AlanObject

回答

13

复合部件延伸UINamingContainer这反过来延长UIComponentBase这反过来已经 definies的idrendered属性。你不需要自己指定它们。只要删除<cc:attribute name="rendered">。如果您在复合组件标签上指定rendered属性,则它将被解释并应用于复合组件本身。

如果您将indend渲染特定组合的子元素,那么最好发明一个不同的属性名称。例如,renderSomeChild

+0

在NetBeans 7.1编辑器中编辑组件时,它将**呈现**属性视为未由** cc:attribute **元素定义的错误。这是一个Netbeans的错误? – AlanObject

+0

对不起,我没有真正使用Netbeans超过5分钟。它在Eclipse中正常工作。 – BalusC

+2

尽可能多地回答您的问题,它在Eclipse中有同样的问题:我自己的合成组件的“已渲染”属性被加下划线并标记为未知元素。 JSF 2.1.24,带有JBOSS JSF工具的Eclipse 3.7.2。 – alfonx

相关问题