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;
}

因为productId并且serviceLocalizator没有setter 和getter。有更多的属性,如“市场”与“daneIn”相关联。

任何人都可以解释为什么:

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

1 回答 1

3

1)通过“当我删除时”,我假设您正在删除为 ServiceLocalizator 定义的托管属性。由于没有注入属性的指令,因此该变量将为空。使用它会导致 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;
    }

}
于 2012-09-26T17:29:39.597 回答