我有一个复合组件(用于搜索组件),例如:
<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代码)?它是如何完成的或者(“最先进的”)?
由于