我一直在使用 JSF 2.0 复合组件,但我对其中的 require 属性有点困惑composite:attribute
标签的意思是做。文档指出,如果页面作者必须提供此属性的值,则必需的属性为 true。
我将其解释为必须为所有具有复合属性的属性提供一个值required=true
。我还假设空字符串是有效值。这就是 Mojarra 2.0.2 中的工作方式。
使用这个简单的托管 bean:
@ManagedBean(name = "simpleMB")
@ViewScoped
public class SimpleManagedBean implements Serializable {
private static final long serialVersionUID = -1;
private String whatever;
... setter and getter
}
以及复合组件:
<composite:interface>
<composite:attribute name="value" required="true" />
</composite:interface>
<composite:implementation>
<h:outputText value="Value: '#{cc.attrs.value}'" />
</composite:implementation>
这些标签在 Mojarra 2.0.2 中有效:
<foo:bar value="" />
<foo:bar value="#{simpleMB.whatever}" />
但是,当我升级到 2.0.3 时,只有第一个标签有效。第二个标签会导致此错误消息:
/requiredAttribute.xhtml @20,42 <foo:bar> The following attribute(s) are
required, but no values have been supplied for them: value.
当我将 required 设置为 false 时,它工作正常。
我是否误解了必需属性的含义?有人可以澄清我应该期待什么行为吗?
Thanks.