-1

我有一个自定义标签并希望允许设置内部元素的 id

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j">

<f:subview rendered="#{not empty id}">
    <h:message styleClass="message" id="#{id}" errorClass="message error"
        warnClass="message warn" for="#{element}" />
</f:subview>
<f:subview rendered="#{not id}">
    <h:message styleClass="message" errorClass="message error"
        warnClass="message warn" for="#{element}" />
</f:subview>
</html>

但我总是得到

Empty id attribute is not allowed

我怎样才能归档当用户设置它使用的 id 时,jsf 应该自己生成它

4

2 回答 2

1

用于<c:if>有条件地添加<f:attribute>带有id.

<h:message styleClass="message" errorClass="message error" warnClass="message warn" for="#{element}">
    <c:if test="#{not empty id}">
        <f:attribute name="id" value="#{id}" />
    </c:if>
</h:message>

顺便说一句,在自定义标签中使用<html>而不是<ui:composition>甚至没有它是很奇怪的。你确定你最终得到了语法上有效的 HTML 吗?此外,您的第二个<f:subview rendered>表达式不正确,但这与您收到的特定错误消息无关。

于 2012-07-15T02:38:25.813 回答
0

使用BalusC的答案让我IllegalArgumentExceptionUIComponent课堂上专门针对id

else if ("id".equals(name) || "parent".equals(name)) {
    throw new IllegalArgumentException();
}

我最终使用了 Omnifaces' o:tagAttribute

于 2020-06-12T12:31:15.820 回答