我是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'相关联。
任何人都可以解释原因:
<managet-property>
时,ServiceLocalizator
有空指针异常,尽管我调用静态方法。我应该阅读什么来理解它?@ManagedProperty
用于“市场”和daneIn的其他属性吗?如果是,怎么样?答案 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;
}
}