【问题标题】:How to pass the validator property to a h:inputText from a JSF2 composite component?如何将验证器属性从 JSF2 复合组件传递给 h:inputText?
【发布时间】:2012-03-15 03:55:09
【问题描述】:

我们有一个作为 JSF 2 组件创建的文本输入组件,它封装了标签和编辑字段 (h:inputText),它还负责布局。 我们目前的问题是让 inputField 的验证器属性暴露在我们的复合组件上。我们在 cc:interface 部分声明了属性,但是在 cc:implementation 中声明内部 h:inputText 时添加validator="#{validator}" 的问题是,当不使用该字段时,它会在运行时失败。

我想以与 h:inputText 相同的方式执行此操作,而无需注册自定义验证器。

对于这类问题是否有一些已知的解决方案?我们尝试创建一个自定义标签以在复合组件内部使用,但它过于复杂并且最终无法正常工作,所以我想问问专家是否有一种简单的方法。

注意:我想在我的复合组件的验证器属性中使用方法绑定表达式,就像原来的 h:inputText 一样。 感谢您的帮助!

【问题讨论】:

    标签: jsf jsf-2 validation composite-component


    【解决方案1】:

    我有一些带有特定掩码、验证和转换器的组件。

    首先,我定义了一个名为“defaultText”的组件,如下所示:

    </cc:interface>
        <cc:attribute name="value"/>
        <cc:editableValueHolder name="mycomp" targets="input"/>
    </cc:interface>
    <cc:implementation>
        <p:inputMask id="input" value="#{cc.attrs.value}"/>
    </cc:implementation>
    

    (为了节省空间,我还提供了一些其他属性)。看到 editableValueHandler 了吗?这是您定义将链接您的转换器/验证器的组件的地方。

    所以,我使用我的“defaultText”组件来构建其他组件,例如,“text.xhtml”:

    </cc:interface>
        <cc:attribute name="value"/>
        <cc:attribute name="mask"/>
        <cc:attribute name="jsfConverter"/>
        <cc:attribute name="jsfValidator"/>
    </cc:interface>
    <cc:implementation>
        <foo:defaultText id="dt" value="#{cc.attrs.value}" mask="#{cc.attrs.mask}">
            <c:if test="#{!empty cc.attrs.jsfConverter}">
                <f:converter converterId="#{cc.attrs.jsfConverter}" for="mycomp"/>
            </c:if>
            <c:if test="#{!empty cc.attrs.jsfValidator}">
                <f:validator validatorId="#{cc.attrs.jsfValidator}" for="mycomp"/>
            </c:if>
        </foo:defaultText>
    </cc:implementation>
    

    &lt;composite:editableValueHolder&gt; 定义任何验证器/转换器 (&lt;f:validator for="mycomp"&gt;) 都将关联到 &lt;p:inputMask id="input"&gt;

    然后我在我的页面上使用我的文本组件:

    <foo:text value="#{dummyMBean.text}" mask="99.999-99" jsfConverter="..." jsfValidator="..."/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2011-07-24
      • 2014-07-22
      • 1970-01-01
      • 2013-04-26
      • 2017-03-06
      • 1970-01-01
      相关资源
      最近更新 更多