1

我有一个复合组件(用于搜索组件),例如:

<cc:interface>
    <cc:attribute name="dialogWidgetVar" required="true" />
    <cc:attribute name="dialogTitle" required="false" default="Search Employees" />
    <cc:attribute name="dialogWidth" required="false" default="770" />

    ...

    <cc:attribute name="searcherBean" required="false" default="#{cc.attrs.managerBean.searcher}" />
    <cc:attribute name="managerBean" required="true" />

</cc:interface>

注意线

    <cc:attribute name="searcherBean" required="false" default="#{cc.attrs.managerBean.searcher}" />

如果没有提供/覆盖,则尝试引用 managerBean 的搜索器。

这会从 UI 抛出异常:

Caused by: javax.el.PropertyNotFoundException: /resources/components/company/genericSearcherDialog.xhtml @32,133 rendered="#{cc.attrs.searcherBean.quickSearchEnabled}": The class 'java.lang.String' does not have the property 'quickSearchEnabled'.
        at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
        at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:413)
        ...

searcherBean 默认值似乎被严格解释为字符串,因此这或多或少是一个后续异常。

更改属性的顺序没有任何作用。

您如何默认使用复合组件界面中的另一个(必需)属性字段(无需转到 UI 代码)?它是如何替代的(“最先进的”)?

谢谢

4

0 回答 0