复合组件必需属性在Mojarra 2.0.3中抛出异常

时间:2010-11-03 09:14:18

标签: jsf-2 composite-component

我一直在使用JSF 2.0复合组件,但我对composite:attribute标记中的require属性要做什么感到困惑。文档说如果页面作者必须为此属性提供值,则必需属性为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.

当我将require设置为false时,它工作正常。

我是否误解了所需属性的含义?有人可以澄清我应该期待的行为吗?

感谢。

3 个答案:

答案 0 :(得分:2)

与@ViewScoped bean结合使用时,我们遇到了必需=“true”的类似问题。

我的情况是bean不再像@ViewScoped bean那样(每次都有新的构造函数调用)。

你的问题可能是因为bean失去了它的范围,变量又是null吗?

无论哪种情况,我能给你的唯一一个awnser是不使用required =“true”或使用@SessionScoped bean。

(可能这与Mojarra无法处理@ViewScoped bean中的属性绑定的问题有关)

答案 1 :(得分:0)

我不知道它是否是一个bug,但它是el-expressions的本质。默认表达式类型为String,空字符串转换为null。

答案 2 :(得分:0)

这似乎是this issue,它似乎已经暂时关闭了,虽然我似乎无法找到它包含在哪个版本中。