jsf将selectOneMenu值作为直接请求托管bean发送

时间:2012-02-18 01:43:44

标签: jsf properties managed-bean selectonemenu

我有一个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的属性就足够了。

有人可以如此善良并解释原因吗?

1 个答案:

答案 0 :(得分:1)

因为JSF已经预先创建了bean实例。如果范围中已存在实例,则不会使用模型值覆盖它。从<managed-bean>移除faces-config.xml,它会正常工作。


无关到具体问题,您似乎已经在使用JSF 2.x.为什么坚持使用旧的JSF 1.x样式faces-config.xml配置?只需使用@ManagedBean注释(当然只在真正的支持bean类上)。