StackruError путем получения объекта из SelectOneMenu (компонент Primefaces)

У меня большая проблема, и за 3 дня я не могу ее решить. Проблема появляется, когда я пытаюсь получить объект, используя компонент SelectOneMenu. Это трассировка стека StackOverFlowException:

java.lang.StackruError
    at java.util.Vector.listIterator(Vector.java:1103)
    at java.util.AbstractList.equals(AbstractList.java:518)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)
    at org.eclipse.persistence.indirection.IndirectList.equals(IndirectList.java:396)
    at java.util.Objects.equals(Objects.java:57)
    at entity.MainCategory.equals(MainCategory.java:98)
    at java.util.Objects.equals(Objects.java:57)
    at entity.SubCategory.equals(SubCategory.java:121)
    at java.util.AbstractList.equals(AbstractList.java:523)
    at java.util.Vector.equals(Vector.java:981)

Это часть кода контроллера:

@ManagedBean
@SessionScoped
public class CategoriesControllerPanel implements Serializable{
    @EJB
    private MainCategoryDao mainCategoryDao;
    @EJB
    private SubCategoryDao subCategoryDao;
    @EJB
    private ProductDao productDao;
    private Product product = new Product();
    private List<Product> productList= new ArrayList<>();
    private MainCategory mainCategory = new MainCategory();
    private List<MainCategory> mainCategoryList = new ArrayList<>();
    private SubCategory subCategory = new SubCategory();
    private List<SubCategory> subCategoryList = new ArrayList<>();
    @NotEmpty(message = "Wartość nie może być pusta")
    private String newSubCategoryName=" " ;
    @NotEmpty(message = "Wartość nie może być pusta")
    private String newMainCategoryName=" " ;
    private String[] mainCategoryNames;
    private String oneSelectMenuName;
    private MainCategory mainCategoryTmp;

    @PostConstruct
    public void start(){
        get_MainCategoryList();
        get_SubCategoryList();      
        subCategory = subCategoryDao.getSubCategoryById(1);
    }

        public void display(String i){       
        System.out.println("Test");
        System.out.println(i);

    }

это конвертер в MainCategory:

@ManagedBean
@ApplicationScoped
@FacesConverter("MainCategoryConverter")
public class MainCategoryMenuConverter implements Converter {

    @EJB
    private final MainCategoryDao service = null;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
          try {
            //Returns the item label of <f:selectItem>
            //System.out.println("value = " + value);

            if (value == null || value.isEmpty()) {
                return null; // Let required="true" do its job on this.
            }

            int parsedValue = Integer.parseInt(value);

            if (parsedValue <= 0) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Message"));
            }

            MainCategory entity = service.getMainCategoryById(parsedValue);

            if (entity == null) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_WARN, "", "Message"));
            }

            return entity;
        } catch (NumberFormatException e) {
            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Message"), e);
        }
    }
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null) {
        return ""; // Required by spec.
    }

    if (!(value instanceof MainCategory)) {
        throw new ConverterException("Value is not a valid instance of SomeEntity.");
    }

    int id = ((MainCategory) value).getId();
    String idString = "" + id;
    return  (idString != null) ? idString : "";
    }

}

И простой пример в JSF Page:

<ui:define name="content">
        <h:form>

            <p:fieldset legend="Tutaj możesz zarządać transakcjami serwisu" style="margin-bottom:20px">
                <h:panelGrid columns="3" cellpadding="5">

                    <h:outputText value="#{categoriesControllerPanel.subCategory.name}" escape="false"/>

                    <p:commandButton value="Zmień" onclick="PF('setMainCategoryDlg_#{categoriesControllerPanel.subCategory}').show()" icon="ui-icon-check" style="width: 70%"/>

                    <p:dialog header="Właściwości" widgetVar="setMainCategoryDlg_#{categoriesControllerPanel.subCategory}" modal="true" height="100" width="500" id="selectOneMenu">

                        <p:panelGrid columns="2" id="displayMenu" columnClasses="label,value">

                            <p:selectOneMenu id="setMainCategoryMenu" value="#{categoriesControllerPanel.mainCategoryTmp}" converter="#{mainCategoryMenuConverter}">

                                <f:selectItem itemLabel="#{categoriesControllerPanel.subCategory.mainCategory.name}"/>
                                <f:selectItems value="#{categoriesControllerPanel.mainCategoryList}" var="i" itemLabel="#{i.name}" itemValue="#{i}"/>

                            </p:selectOneMenu>

                            <p:commandButton value="Yes" icon="ui-icon-check"  ajax="false" action="#{categoriesControllerPanel.display(categoriesControllerPanel.mainCategoryTmp)}" />

                        </p:panelGrid>
                    </p:dialog>


                </h:panelGrid>
            </p:fieldset>
        </h:form>
    </ui:define>

Проблема появляется, когда я выбираю основную категорию из меню и нажимаю кнопку отправки. экран:

Problem_screen


Спасибо за быстрый ответ, но я никогда не использую равных там. Проблема появляется, когда я пытаюсь переопределить объект MainCategory. Пример смотри:

MainCategory mainCategoryTmp2 = mainCategoryDao.getMainCategoryByName("Ogrody"); // good 
mainCategoryTmp = mainCategoryTmp2; // StackOverFlow Error

то же самое для:

MainCategory mainCategoryTmp2 = mainCategoryDao.getMainCategoryByName("Ogrody");
mainCategoryTmp = null;
mainCategoryTmp = mainCategoryTmp2;

Когда я отлаживаю, это выглядит так, что это переопределение oject хорошо, но после переопределения это время для stackOverFlow Error ... look:

Вы знаете, почему это происходит? (Я не могу ввести изображение здесь, потому что мне нужно 10 баллов репутации, поэтому я дал ссылки)

Хорошо. Я проверил это, и я нашел эти методы. Не могли бы вы сказать мне, как это исправить? Вот равных для главной категории:

@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final MainCategory other = (MainCategory) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        if (!Objects.equals(this.name, other.name)) {
            return false;
        }
        if (!Objects.equals(this.subCategoryList, other.subCategoryList)) {
            return false;
        }
        return true;
}

И это равно для подкатегории:

@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final SubCategory other = (SubCategory) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        if (!Objects.equals(this.name, other.name)) {
            return false;
        }
        if (!Objects.equals(this.mainCategory, other.mainCategory)) {
            return false;
        }
        if (!Objects.equals(this.productList, other.productList)) {
            return false;
        }
        return true;
    }

Существует отношение Один ко Многим:

-MainCategory имеет список подкатегорий

-SubCategory есть пул с MainCategory

Если ты можешь, пожалуйста, попытайся помочь мне:-)

0 ответов

Другие вопросы по тегам