复合JSF 2.2组件,未显示验证消息

时间:2015-03-27 07:34:50

标签: jsf jsf-2.2 composite-component myfaces

我使用公司设计开发自定义JSF 2.2组件。 我输入文字有问题。 问题是如果我使用我的组件并想要指定<h:message for="id_of_component"/>它不起作用。因为组件的id不同。

<h:message for="input"/>
<custom:input id="input" required="true"/>

如果我在组件内指定它可以工作,但它不是我想要的。它应该是灵活的,以防任何人想要在不同于我在组件中指定的地方使用消息。

组件定义(带消息):

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://xmlns.jcp.org/jsf/html"
          xmlns:cc="http://xmlns.jcp.org/jsf/composite"
          xmlns:p="http://xmlns.jcp.org/jsf/passthrough">

    <!-- INTERFACE -->
    <cc:interface name="input" expert="true">
        <cc:attribute name="id" required="false"/>
        <cc:attribute name="label" />
        <cc:attribute name="value" />
        <cc:attribute name="title" />
        <cc:attribute name="readonly" default="false" type="java.lang.Boolean" />
        <cc:attribute name="required" default="false" type="java.lang.Boolean" />
        <cc:attribute name="rendered" default="true" type="java.lang.Boolean" />
        <cc:attribute name="placeholder" type="java.lang.String"/>
        <cc:clientBehavior name="click" targets=":#{cc.id}" event="click" default="true"/>
        <cc:clientBehavior name="change" targets=":#{cc.id}" event="change" default="true"/>
        <cc:clientBehavior name="blur" targets=":#{cc.id}" event="blur" default="true"/>
        <cc:clientBehavior name="keyup" targets=":#{cc.id}" event="keyup" default="true"/>
    </cc:interface>
    <cc:implementation>
        <h:panelGrid rendered="#{cc.attrs.rendered}" columns="2" id="panel" styleClass="customInputWrapper">
            <h:outputLabel title="#{cc.attrs.title}"
                           value="#{cc.attrs.label}#{cc.attrs.required ? ' *' : ''}" for="#{cc.attrs.id}" />
            <h:inputText id="#{cc.attrs.id}" styleClass="customInput" value="#{cc.attrs.value}" p:placeholder="#{cc.attrs.placeholder}" readonly="#{cc.attrs.readonly}" title="#{cc.attrs.title}" required="#{cc.attrs.required}"/>
            <h:message for="#{cc.attrs.id}" />
            <h:outputStylesheet library="custom" name="customComponentsStyle.css"/>

        </h:panelGrid>
    </cc:implementation>
    </html>

你有解决这个问题的方法吗?

0 个答案:

没有答案