我有一个selectOneMenu来管理两个对象A和B之间的关系。 其中A是固定的,B可通过菜单选择 在表单提交B上发送给bean进行进一步处理(创建和保存关系对象AToB)。
不是工作案例!
<h:selectOneMenu value=#{b}>
<!-- b items from bean -->
</h:selectOneMenu>
<h:commandButton action="#{bean.addBToSelA(b)}"/>
<managed-bean>
<description>B Entity Request Bean</description>
<managed-bean-name>b</managed-bean-name>
<managed-bean-class>B</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
工作案例!
但是如果selectOneMenu值是不同托管bean的嵌套属性,则它可以工作。 (例如AToB)
<h:selectOneMenu value=#{aToB.b}>
<!-- b items from bean -->
</h:selectOneMenu>
<h:commandButton action="#{bean.addBToSelA(aToB.b)}"/>
<managed-bean>
<description>AToB Entity Request Bean</description>
<managed-bean-name>aToB</managed-bean-name>
<managed-bean-class>AToB</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
注意:如果我的“b”只是不同请求托管bean的属性就足够了。
有人可以如此善良并解释原因吗?
答案 0 :(得分:1)
因为JSF已经预先创建了bean实例。如果范围中已存在实例,则不会使用模型值覆盖它。从<managed-bean>
移除faces-config.xml
,它会正常工作。
无关到具体问题,您似乎已经在使用JSF 2.x.为什么坚持使用旧的JSF 1.x样式faces-config.xml
配置?只需使用@ManagedBean
注释(当然只在真正的支持bean类上)。