嵌套标记时JSF自定义标记上的重复ID

时间:2013-10-07 14:51:58

标签: jsf jsf-2 mojarra custom-tag

由于性能问题,我正在将一些复合材料迁移到自定义标签。使用复合时,所有ID都已正确生成,但是当使用自定义标签时,我有重复的Id异常,即使我创建了一个自定义EL表达式来生成新ID。

经过一些研究,似乎是因为嵌套标签时会继承标签属性:

<far:fcontainer name="**father1**" type="panel">
 <far:fcontainer type="panel">
  <far:fcontainer type="panel">child 3</farTag:fcontainer>
 </far:fcontainer>
</far:fcontainer>

在示例中,第一个fcontainer应该具有id father1 ,并且嵌套的应该具有生成的ID,但这就是我所拥有的:

<div id="**father1**" class="ui-widget-content">
 <div id="**father1**" class="ui-widget-content">
  <div id="**father1**" class="ui-widget-content">child3</div>
 </div>
</div>

自定义标记为:

<ui:composition>
    <p:outputPanel layout="block" styleClass="#{type == 'panel'?'ui-widget-content':''}" 
         id="#{empty name ? far:generateId() : name}">
        <ui:insert />
    </p:outputPanel>
<ui:composition>

这是正常的吗?有没有解决方法?

在Mojarra 2.1.26上进行测试。

提前致谢。

在MyFaces 2.1.12上测试

更新:,似乎工作正常,Mojarra的错误?

1 个答案:

答案 0 :(得分:0)

此错误的解决方法是始终使用自定义EL表达式,在其中您可以首先检查父组件是否设置了属性。