当前位置: 首页 > 知识库问答 >
问题:

SelectOneMenu始终显示第一项,而不是selected-Primefaces

赵嘉赐
2023-03-14

在这个问题上提供一些帮助将不胜感激。

我有几个JSF页面,但其中一个是子类别,其中有一个SelectOneMenu用于选择类别,但当我尝试编辑子类别时,这个SelectOneMenu总是显示第一个值,并且没有被预选。

我怎么解决这个问题。我读了很多SO帖子,尽管我已经实施了一些建议,但我还没有实现。例如,a@BalusC的一个:

primefaces selectOneMenu在应该的时候不工作

这里是视图

<h:outputText value="Subcategory ID : #{subcategoryController.subcategory.subcategoryId}"/>

<p:selectOneMenu id="cboCategoryDialog" converter="subcategoryConverter"
                 value="#{subcategoryController.category.categoryId}"
                 style="width: 100%"

    <f:selectItems value="#{subcategoryController.categoryList}"
                   var="subcat"
                   itemLabel="#{subcat.categoryName}"
                   itemValue="#{subcat.categoryId}"/>
</p:selectOneMenu>**

这是子类别实体:

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "subcategory_id")
private Integer subcategoryId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "subcategory_name")
private String subcategoryName;
@JoinColumn(name = "category_id", referencedColumnName = "category_id")
@OneToOne(optional = false;
private Category categoryId;

//Getters and Setters Methods

@Override
public int hashCode() {
    return (subcategoryId != null)
            ? (this.getClass().hashCode() + subcategoryId.hashCode())
            : super.hashCode();
}

@Override
public boolean equals(Object obj) {

    return (obj instanceof Subcategory) && (subcategoryId != null)
            ? subcategoryId.equals(((Subcategory) obj).subcategoryId)
            : (obj == this);
}

子分类转换器

@RequestScoped
@FacesConverter("subcategoryConverter")
public class SubcategoryConverter implements Converter {

@EJB
private SubcategoryFacadeLocal EJBsubcategory;

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (!(value instanceof Subcategory) || ((Subcategory) value).getSubcategoryId() == null) {
        return null;
    }

    return String.valueOf(((Subcategory) value).getSubcategoryId());
}

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null || !value.matches("\\d+")) {
        return null;
    }

    Subcategory subcategory = EJBsubcategory.find(Integer.valueOf(value));

    if (subcategory == null) {
        throw new ConverterException(new FacesMessage("Unknown operation ID: " + value));
    }

    return subcategory;

    }
}

下图显示了当我试图编辑任何项目时的对话框,它总是显示计算机,因为它是第一个itm。

查看显示问题的图像

我一直在阅读一些与此相关的有用问题,但我一直无法解决它。

提前感谢,

共有2个答案

屠晟睿
2023-03-14

确保实体hashCode()和equals()方法已实现,并且不会尝试访问可为null的字段。这对我有用!

武友樵
2023-03-14

在查看代码后,我意识到我在JSF中使用了错误的实体。:

例如:

在问题中,我发布了:sub分类Controller.category.categoryId以将类别对象保存在子类别对象中。

具体如下:

<p:selectOneMenu id="cboCategoryDialog" converter="subcategoryConverter"
    value="#{subcategoryController.category.categoryId}"

但是,正确的方法如下:

<p:selectOneMenu id="cboCategoryDialog" converter="omnifaces.SelectItemsConverter"
    value="#{subcategoryController.subcategory.categoryId}"

现在,该组件正“指向”正确的对象。

我面临的另一个问题是:

因为我有嵌套的实体,例如:实体。实体在使用它之前,他们应该在每一个层次上被非专业化。

一些帖子真的,真的,真的帮助了我:

关于解决嵌套实体问题(Property tyNotFoundException)。

识别和解决javax.el.属性NotFoundException:目标不可达

在SelectOneMenu上使用普通和OmniFaces转换器:

http://balusc.omnifaces.org/2007/09/objects-in-hselectonemenu.html

 类似资料:
  • 问题内容: 下面是我的代码。 Calendar.HOUR应该给我 public static final int HOUR get和set的字段号,指示上午或下午的时间。HOUR用于12小时制(0-11)。中午和午夜用0而不是12表示。例如,在10:04:15.250 PM,小时是10。 不管我运行该代码多少次,它总是给我相同的unique_id。(101213),而我在计算机上的本地时间是下午1

  • 问题内容: 我了解都和工作。我想知道是否有什么可以做的? 即可以使用以下模式替换: 我想问的是,我想让Python OO的这一方面更适合我。 问题答案: guido帖子中的一个可能答案(感谢@ fraca7): 例如,在pickle模块中,用于反序列化对象时创建实例。在这种情况下,将创建实例,但不会调用该方法。 还有其他类似的答案吗? 我接受这个答案是对我自己的问题的“是”: 我想知道是否有什么可

  • 问题就在这里:我创建了世界上最简单的RecyclerView,但它只显示第一个项目。我不明白为什么。谢谢你的帮助。 item_layout.xml mainactivity.java

  • 我有一个自定义文本字段,但如图所示,底部文本字段看起来如此模糊和空,我想保持提示显示,即使字段不集中,我如何在颤振中实现这一点? 这里是我的小部件代码:

  • 问题内容: 我有一个全州所有城市的selectOneMenu。我已经编写了一个SQL将资金放在首位,但是我想将其加粗以使使用它的人更容易理解。有没有办法加粗它或做其他事情以使第二个选项更可见? 问题答案: 由生成的HTML 元素只允许很少的细粒度样式,而CSS支持则取决于浏览器。您 可以 使用CSS3 伪选择器。例如 与 但这并不适用于所有浏览器。只有Firefox会吃,而MSIE和Chrome不

  • 我对primefaces ajax调用侦听器有问题。(primefaces 4.0、JSF 2.0、JBoss 6.1.1) 这是我定义的SelectOne菜单: 这是我的managedBean的主要部分 当我打开页面时,日志告诉我init方法已被执行,selectOneMenus已正确填充,因此我假设托管bean正在工作。如果我更改了我在上面写的selectOneMenu,我想修改的select