我创建了一些 Facelets 来简化我们的页面开发。特别是,我为输入组件创建了一系列 Facelets。我有 1 个 Facelet,<xxx:input />
它在输入字段周围显示一个标签。除此之外,我还有 Facelets <xxx:inputText />
,<xxx:inputSecret />
它可以渲染实际的输入字段。这些中的每一个都<xxx:input />
用于显示标签。Facelet 看起来像这样:
<html ...>
<composite:interface>
...
</composite:interface>
<composite:implementation>
<label><h:outputText value="#{cc.attrs.labelText}" /></label>
<composite:insertChildren />
</composite:implementation>
</html>
Facelet将<xxx:inputText />
看起来像这样......
<html ...>
<composite:interface>
...
</composite:interface>
<composite:implementation>
<xxx:input labelText=...>
<h:inputText id="myinput" ... />
</xxx:input>
</composite:implementation>
</html>
一切都很好,但我在尝试添加<f:validator />
或其他验证标签时遇到了麻烦。根据我的阅读,我必须在我的 Facelet 中添加一个标签。所以,我<composite:editableValueHolder name="myinput" targets="myinput" />
在界面部分添加了一行。但是,我仍然没有看到我的验证器被解雇。我的 .xhtml 文件中有类似的内容...
...
<xxx:inputText value="...">
<f:validateLength minimum="10" for="myinput" />
</xxx:inputText>
...
无论我输入什么输入,验证器似乎都不会触发,我也从未收到错误消息。一位同事建议这是由于我使用的目标 ID 以及它被<xxx:input />
Facelet 包装的事实。
我是否需要在我的目标定义中加入父组件 ID?还有什么我想念的吗?如果我排除<xxx:input />
Facelet,它就可以正常工作,所以我假设它与此相关,但不知道如何解决它。非常感谢您提供的任何帮助。