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