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

jsf发送selectOneMenu值作为直接请求管理bean,jsf,properties,managed-bean,selectonemenu,Jsf,Properties,Managed Bean,Selectonemenu,我有一个SelectOne菜单,它管理两个对象a和B之间的关系。 其中A是固定的,B是可通过菜单选择的。 在表单上,提交B被发送到bean进行进一步处理(创建并保存关系对象AToB) 不起作用 <h:selectOneMenu value=#{b}> <!-- b items from bean --> </h:selectOneMenu> <h:commandButton action="#{bean.addBToSelA(b)}"/>

我有一个SelectOne菜单,它管理两个对象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>

实体请求Bean
B
B
要求
工作案例

但是,如果selectOneMenu值是另一个托管bean的嵌套属性,它就可以工作。(例如AToB)


AToB实体请求Bean
阿托布
阿托布
要求
注意:如果我的“b”只是另一个请求管理bean的属性,这就足够了


有人能这么友善地解释一下原因吗?

因为JSF已经事先创建了bean实例。如果实例已存在于范围中,则不会使用模型值覆盖它。从
faces config.xml
中删除
,它就可以正常工作了



与具体问题无关,您似乎已经在使用JSF2.x了。为什么要坚持旧的JSF1.x样式
faces config.xml
configuration?只需使用
@ManagedBean
注释(当然,仅限于真正的支持bean类)。

谢谢您的回答,稍后将对此进行测试。这些请求范围实体只是Hibernate中的Pojo,根本没有任何注释。它们从EAR中检索,并在其客户端之间共享(将来将共享)。我的想法是,这样我就可以保持它的独立性,并在必要时为每个客户提供不同的服务。如果注释是特定于应用程序/项目的,并且肯定不会被重用,那么我不介意将它们插入到源代码中。但每一个都有优点和缺点。我不能删除它,因为我有另一个表单,可以在其中添加新的B对象和用户输入的属性。所以我必须重新命名它。
<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>