我是 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 类中,市场是 setter,产品是 getter,市场是另一个类的一部分。
private SomeClass daneIn;
public void setMarket(Long market) {
this.daneIn.setMarket( market );
}
private SomeClass2 produkt;
public SomeClass2 getProdukt() {
return produkt;
}
对于productId
和serviceLocalizator
没有 setter 和 getter。
还有更多属性,例如“market”与“daneIn”相关。
谁能解释一下为什么:
- 当我删除
<managet-property>
时我有ServiceLocalizator
的空指针异常,尽管我调用静态方法。我应该读什么才能理解它? - 为什么 faces-config 使用括号[],而不是点?是用POST还是GET连接?
- 我可以使用
@ManagedProperty
对于 daneIn 的“市场”和其他属性?如果是,怎么做?
最佳答案
1) 通过“当我删除时”,我假设您正在删除为 ServiceLocalizator 定义的托管属性。由于没有注入(inject)属性的指令,因此该变量将为空。使用它会导致 NPE。
2) 方括号符号有多种用途,包括涵盖您的情况的用途。您可以通过映射的键获取映射的值,但这里您获取的是带括号的 'produkt.id'
元素的值,因为用作键的值包含一个或多个句点。如果删除句点,也可以使用 #{param.produktid}
。 (感谢 BalusC 的指导)
3) 您必须声明要使用注释注入(inject)的属性并提供 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;
}
}
关于java - 托管属性从 jsf 1.2 迁移到 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606913/