为什么我可以立即使用可写属性评估$ {bean.property}?

时间:2012-12-12 03:34:47

标签: java jsf-2 glassfish el mojarra

我理解根据JEE6 tutorial不应该有效。

<h:inputText value="${bean.name}/>

和托管bean

@ManagedBean
public class Bean {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

但它工作得很好,我可以从响应页面读取'name'属性。我认为它只适用于可写属性的延迟评估#{expr}。

1 个答案:

答案 0 :(得分:1)

根据JEE6教程:

  
      
  • Rvalue表达式可以读取数据,但无法写入。
  •   
  • 立即评估的所有表达式都使用$ {}分隔符,并且始终是rvalue表达式
  •   

因此,这可能会让您认为您不能在可写属性中使用${},但如果您稍后阅读:

  

可以使用值表达式:使用表达式的值表达式   $ {}分隔符可用于:

     
      
  • 静态文字
  •   
  • 任何可以接受表达式的标准或自定义标记属性
  •   

所以,如果我没有弄错的话,这与前者并不矛盾。这只是意味着当您使用<h:inputText value="${bean.name}"/>时,它将用于读取name属性,但如果修改{{1}中的内容,将不会写 }}