2
由於性能問題,我正在將一些組合標記遷移到自定義標記。使用組合時,所有的ID都可以正確生成,但是當使用自定義標籤時,我有重複的Id異常,即使我創建了一個自定義EL表達式來生成新的ID。嵌套標記時JSF自定義標記上的重複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上測試,似乎工作正常,莫哈拉的錯誤?
在MyFaces中,有一個很大的修復了id生成算法,使它更具可預測性和獨特性,並且以這種方式更加穩定。這是一個很長的故事,那裏有很多艱苦的工作,但在我看來,這是目前爲止這個問題的最佳解決方案。看起來Mojarra仍然有舊的Facelets 1.1.x算法,我想你在Mojarra看到的合成器是由MyFaces 2.2.x引起的,它發現了該算法的一些重要缺陷,並記得Facelets代碼也被捐贈給了MyFaces ,所以這兩個實現最初在那裏使用相同的代碼。 – lu4242
您可以在生成的標記之前連接一些單詞?你試過了嗎? –