2016-10-08 9 views
0

Некоторая помощь будет оценена по этой проблеме.SelectOneMenu всегда показывает первый элемент, а не выбранный - Primefaces

У меня есть несколько страниц JSF, но один из них является категорией, где есть SelectOneMenu для выбора Категории, но когда я пытаюсь изменить подкатегорию, это SelectOneMenu всегда показывает первое значение и не получает предварительный выбор.

Как я могу решить эту проблему. Я много читал SO сообщения и eventhougn Я реализовал пару советов, которых я не достиг. например, @BalusC «s один:

primefaces selectOneMenu doesn't working when it should

Вот мнение о

<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>** 

Это категория Entity:

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); 
} 

S ubcategoryConverter

@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.

See the image showing the issue

Я читал некоторые связанные полезные вопросы по этому поводу, но я не смог это исправить.

Спасибо заранее,

+1

где ваш конвертер? Что такое подкатегорияController.category.categoryId? – Kenshin

+1

Я использую Onmifaces SelectItemsConverter. subcategoryController.category.categoryId - это место, где выбранная категория сохраняется в сущности подкатегории. @Arun – JVz

+0

PLS сообщение конвертер код – Kenshin

ответ

1

После анализа кода, я понял, что я использовал неправильную организацию в JSF.:

Например:

В вопросе, я отвечал: subcategoryController.category.categoryId спасти Категории объекта в подкатегории объекта.

следующим образом:

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

Но правильный подход заключается в следующем:

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

Теперь этот компонент является "наведение" на правильный объект.

Другой вопрос, что я облицовкой:

Как я Вложенные сущности, пример: Entity.entity.entity они должны быть inicialized на каждом уровне, прежде чем использовать его.

Некоторые сообщения, которые на самом деле, на самом деле, очень помогли мне в этом:

О решении вложенных объектов выдает (PropertyNotFoundException).

Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable

С помощью обычного и OmniFaces конвертер на SelectOneMenu:

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