0

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

有人可以这么友善并解释原因吗?

4

1 回答 1

1

因为 JSF 已经预先创建了 bean 实例。如果实例已经存在于范围中,它不会被模型值覆盖。删除<managed-bean>from faces-config.xml,它会工作得很好。


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

于 2012-02-18T03:22:59.437 回答