Java 在向下搜索SelectOne菜单中显示值(父子菜单)

Java 在向下搜索SelectOne菜单中显示值(父子菜单),java,jsf,jakarta-ee,jsf-2,Java,Jsf,Jakarta Ee,Jsf 2,当我填充两个selectOneMenu的向下搜索选项时,我遇到了一个恼人的问题。第一个菜单是扇区,它控制另一个类别。我根据扇区加载类别的选择,所有这些都可以正常工作 但是,当我编辑一个业务对象时,该对象附带了一个类别(有一个)扇区。首次加载edit.xhtml页面时,该类别未显示。我知道SessionScopedbacking bean中的值是正确的。如果我选择了另一个扇区类别,然后返回到初始扇区,那么该类别将被正确设置,因为它首先被持久化 POJO类(扇区类别)具有hashCode()和equ

当我填充两个
selectOneMenu
的向下搜索选项时,我遇到了一个恼人的问题。第一个菜单是扇区,它控制另一个类别。我根据扇区加载类别的选择,所有这些都可以正常工作

但是,当我编辑一个业务对象时,该对象附带了一个类别(有一个)扇区。首次加载edit.xhtml页面时,该类别未显示。我知道
SessionScoped
backing bean中的值是正确的。如果我选择了另一个扇区类别,然后返回到初始扇区,那么该类别将被正确设置,因为它首先被持久化

POJO类(扇区类别)具有
hashCode()
equals(Object Object)
函数

我已经为POJO对象生成了CRUD生成的JSF转换器,但我认为这不会导致问题。我认为由于某些原因,第二个
selectOneMenu
没有显示它应该显示的值。如果我将父(扇区)翻转到其他位置并返回初始状态,则会显示管理bean中的正确值

我如何使Category
selectOneMenu
组件显示托管bean中的值

你好,克里斯

面临错误消息

FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=null[severity=(ERROR 2), summary=(No activity selected), detail=(No activity selected)]
Edit.xhtml

... 
<h:outputLabel value="Sector:" />                    
<h:selectOneMenu id="sectorSelector" value="#{activityController.selectedSector}" title="#{bundle.CreateSectorLabel_sectorName}" required="false" requiredMessage="#{bundle.CreateSectorRequiredMessage_sectorName}"
        valueChangeListener="#{activityController.changeSectorMenu}"
            disabled="#{activityController.activityStatusOngoing or activityController.activityStatusComplete}">
    <f:ajax event="change" execute="@this" render="categoryMenu"/>
            <f:selectItems value="#{sectorController.itemsAvailableSelectOne}"/>
</h:selectOneMenu>

<h:outputLabel value="Category:" />
    <h:selectOneMenu id="categoryMenu" value="#{activityController.selectedCategory}" title="#{bundle.CreateSectorLabel_sectorName}" 
        required="true" requiredMessage="#{bundle.CreateCategoryRequiredMessage_sector}"
            disabled="#{activityController.activityStatusOngoing}" rendered="true"> 
    <f:selectItems value="#{activityController.categorySelection}"/>
    </h:selectOneMenu>
...
POJO对象的一部分

...
public class Category implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idCategory")
    private Integer idCategory;
    ...
选项(不像我最近做的那个样困难)是包括接缝面和持久性模块。Seam Faces模块启用ViewScope而不使用@ManagedBean注释

但是SeamFaces迫使我们(这是合理的)使用CDI注释(@Named而不是@ManagedBean等)


。(您可以使用@EJB,也可以注入任何带有@Named注释的bean)

这不是我第一次想到的转换器。这是两个
selectOneMenu
的呈现。这是我对XHTML文件所做的更改。谢谢你的时间和努力,克里斯

Edit.xhtml

<h:outputLabel value="Sector:" />                    
<h:selectOneMenu id="sectorSelector" value="#{activityController.selectedSector}" title="#{bundle.CreateSectorLabel_sectorName}" required="false" requiredMessage="#{bundle.CreateSectorRequiredMessage_sectorName}"
        valueChangeListener="#{activityController.changeSectorMenu}" immediate="true"
            disabled="#{activityController.activityStatusOngoing or activityController.activityStatusComplete}">
    <a4j:ajax event="change" execute="@this categoryMenu" render="categoryMenu"/>
            <f:selectItems value="#{sectorController.itemsAvailableSelectOne}"/>
</h:selectOneMenu>

<h:outputLabel value="Category:" />
    <h:selectOneMenu id="categoryMenu" value="#{activityController.selectedCategory}" title="#{bundle.CreateSectorLabel_sectorName}" 
        binding="#{activityController.categoryMenu}"
            required="true" requiredMessage="#{bundle.CreateCategoryRequiredMessage_sector}"                                     
            disabled="#{activityController.activityStatusOngoing}">
            <f:selectItems value="#{activityController.categorySelection}"/>
</h:selectOneMenu>

<h:outputLabel value="Sector:" />                    
<h:selectOneMenu id="sectorSelector" value="#{activityController.selectedSector}" title="#{bundle.CreateSectorLabel_sectorName}" required="false" requiredMessage="#{bundle.CreateSectorRequiredMessage_sectorName}"
        valueChangeListener="#{activityController.changeSectorMenu}" immediate="true"
            disabled="#{activityController.activityStatusOngoing or activityController.activityStatusComplete}">
    <a4j:ajax event="change" execute="@this categoryMenu" render="categoryMenu"/>
            <f:selectItems value="#{sectorController.itemsAvailableSelectOne}"/>
</h:selectOneMenu>

<h:outputLabel value="Category:" />
    <h:selectOneMenu id="categoryMenu" value="#{activityController.selectedCategory}" title="#{bundle.CreateSectorLabel_sectorName}" 
        binding="#{activityController.categoryMenu}"
            required="true" requiredMessage="#{bundle.CreateCategoryRequiredMessage_sector}"                                     
            disabled="#{activityController.activityStatusOngoing}">
            <f:selectItems value="#{activityController.categorySelection}"/>
</h:selectOneMenu>