托管属性从jsf 1.2迁移到2.1

时间:2012-09-26 17:08:07

标签: java jsf jsf-2

我是JSF的新手,我正在寻找几个与托管属性连接的问题的答案。

我正在使用非常旧的代码,我尝试更新它。

<managed-bean>
  <managed-bean-name>bean</managed-bean-name>
  <managed-bean-class>com.example.Bean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
    <property-name>serviceLocalizator</property-name>
    <value>#{serviceLocalizator}</value>
  </managed-property>
  <managed-property>
    <property-name>market</property-name>
    <value>#{param['market']}</value>
  </managed-property>
  <managed-property>
    <property-name>produktId</property-name>
    <value>#{param['produkt.id']}</value>
  </managed-property>
</managed-bean>

在bean类是产品的市场和吸气剂,市场是另一类的一部分。

private SomeClass daneIn;

public void setMarket(Long market) {
    this.daneIn.setMarket( market );
}

private SomeClass2 produkt;

public  SomeClass2 getProdukt() {       
    return produkt;
}

对于productIdserviceLocalizator,没有setter和getter。 有更多属性,如'市场'与'daneIn'相关联。

任何人都可以解释原因:

  1. 当我删除<managet-property>时,ServiceLocalizator有空指针异常,尽管我调用静态方法。我应该阅读什么来理解它?
  2. 为什么faces-config使用括号[]而不是点?是连接POST还是GET?
  3. 我可以将@ManagedProperty用于“市场”和daneIn的其他属性吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:3)

1)当我删除&#34;我假设您正在删除为ServiceLocalizator定义的托管属性。由于没有注入属性的指令,该变量将为null。使用它将导致NPE。

2)括号表示法用于各种用途,包括涵盖您案例的用途。您可以通过其键获取地图的值,但是您在此处使用括号获取'produkt.id'元素的值,因为用作键的值包含一个或多个句点。如果删除期间,也可以使用#{param.produktid}。 (感谢BalusC了解这一方面的指示

3)您必须使用注释声明要注入的属性并提供一个setter。

public class YourBean {

    //Also, you can use #{param['market']} as the value of the ManagedProperty        
    @ManagedProperty(value = "#{param.market}")
    private Long market;

    public void setMarket(Long market) {
        this.market = market;
    }

}