【问题标题】:JSF 2 h:message in composite component can't find id of inputJSF 2 h:复合组件中的消息找不到输入的 id
【发布时间】:2011-10-01 03:04:25
【问题描述】:

我有以下工作代码:

<h:outputLabel value="Name:" for="nameField"/>
<h:panelGroup>
    <h:inputText id="nameField" value="${bean.name}" required="true" />
    <t:message for="nameField"
        detailFormat="!" tooltip="true" errorClass="errorMessage"
        infoClass="infoMessage" fatalClass="fatalMessage"
        warnClass="warningMessage"/>
</h:panelGroup>

现在我正在尝试将消息组件包装成一个复合组件,如下所示:

<composite:interface>
    <composite:attribute name="for" required="true"/>
</composite:interface>

<composite:implementation>
    <t:message for="#{cc.attrs.for}"
                detailFormat="!" tooltip="true"
                errorClass="errorMessage" infoClass="infoMessage"
                fatalClass="fatalMessage" warnClass="warningMessage"/>
</composite:implementation>

使用参考实现 (2.0.3) 我得到以下异常:

Jul 8, 2011 10:59:13 AM org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMessageRendererBase renderMessage
SEVERE: Could not render Message. Unable to find component 'nameField' (calling findComponent on component 'simplePersonSearchForm:j_idt89:j_idt100'). If the provided id was correct, wrap the message and its component into an h:panelGroup or h:panelGrid.
java.lang.NullPointerException
    at com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler.createMetaRuleset(CompositeComponentTagHandler.java:247)
    at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:123)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:96)
    at com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler.setAttributes(CompositeComponentTagHandler.java:225)
    at com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler.applyNextHandler(CompositeComponentTagHandler.java:178)
.....
.....

【问题讨论】:

    标签: java jsf jsf-2 composite-component


    【解决方案1】:

    &lt;h:message&gt; 可以正常工作。我认为这是 Tomahawk 实现中的一个错误。

    所以你有两个选择:

    1. 将其替换为&lt;h:message&gt;

    2. 将问题报告给 Tomahawk 人员并等待他们解决。

    【讨论】:

    • h:message 似乎也不起作用,.. 我没有得到堆栈跟踪,但消息也没有显示。如果我只用 h:message(或 t:message)替换复合组件,则消息会显示。
    • 也许我应该提到我使用过 Mojarra 2.1.1。好了,现在你也知道了。
    • 是的,我尝试了不同的版本,目前使用的是 2.1.2,但它似乎不起作用。但我会在假期后进一步调查。我还会向 tomahawk 提交错误报告。
    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多