用一种非常简单的方式,这里有一个组合:
<ui:component
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
xmlns:p="http://primefaces.org/ui"
>
<cc:interface>
<cc:attribute name="value" />
<cc:attribute name="required" />
<cc:editableValueHolder name="calendar" />
</cc:interface>
<cc:implementation>
<p:calendar id="calendar" value="#{cc.attrs.value}" required="#{cc.attrs.required}" showOn="button"/>
</cc:implementation>
</ui:component>
以下是我如何使用它:
<p:outputLabel for="rat:calendar" value="Hello" />
<my:calendar id="rat" required="true"/>
应该显示一个必需的=true图标,但它没有。在OutputLabelRenderer中看起来不错,除了在第118行,input.isRequired()返回false,而我显式设置为true。我不认为它与Primefaces有关,但看起来像是JSF问题(我使用的是Mojarra 2.2.13,也在Myfaces 2.2.4上复制)
Myfaces提供的解释:https://issues.apache.org/jira/browse/MYFACES-4059