2017-04-07 80 views
2

我创建了custom Facelet tag。我希望ID回退到默认的j_idtXxx,就好像在XHTML中没有设置ID时一样。如何在Facelet标记中使用默认生成的标识

所以,我想<my:tag id="fiets"/>被渲染为<span id="fiets"/>

但是,<my:tag/>应呈现为<span id="j_idtXxx"/>

如果我在我的标记文件中使用<h:anyTag id="#{id}"/>,它只会在空的ID属性上失败。有什么方法可以呈现为默认生成的ID吗?我想创建类似于:

<c:set var="id" value="#{empty id ? USE_DEFAULT : id}" /> 

但我不知道在USE_DEFAULT上使用什么。

回答

2

该功能由UIViewRoot#createUniqueId()提供。 EL中的当前UIViewRoot实例可用作隐式对象#{view}

所以,这应该这样做:

<c:set var="id" value="#{empty id ? view.createUniqueId() : id}" /> 
+0

感谢您的提示答案。在我的情况下,这导致了一个异常:'组件ID main:j_id6已经在视图中找到'。 –

+0

如果它有'范围=“请求”或更广泛的范围,并且存在多个相同标记的实例,则可能发生这种情况。 – BalusC

+0

我删除了'',刚用过'id =“#{empty id?view.createUniqueId():id}”'。现在它可以工作。 –