JSF复合组件:可选属性应默认为另一个(必需)属性的属性

时间:2013-06-13 11:55:58

标签: jsf jsf-2 composite-component

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

<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代码)?它是如何完成的或者(“最先进的”)?

由于

0 个答案:

没有答案