Primefaces onemenu не передает объект

157
10 марта 2018, 19:10

Не происходит сохранения студента, при выбранном универе, причем когда можно оставить поле univer пустым, все отлично сохраняет.

Рабочий пример на сервере

Создания таблиц:

Table: Students
Create Table: CREATE TABLE `Students` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) DEFAULT NULL,
  `Surname` varchar(255) DEFAULT NULL,
  `age` int(11) NOT NULL,
  `univer_univerId` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK8xg6lh2ugtycfqxvgopeykaoi` (`univer_univerId`),
  CONSTRAINT `FK8xg6lh2ugtycfqxvgopeykaoi` FOREIGN KEY (`univer_univerId`) REFERENCES `Univers` (`univerId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Table: Univers
Create Table: CREATE TABLE `Univers` (
  `univerId` bigint(20) NOT NULL AUTO_INCREMENT,
  `avg_age` double NOT NULL,
  `label` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`univerId`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

Фрагмент index.xhtml

 <p:outputLabel value="Univer"/>
                            <p:selectOneMenu value="#{studentBean.univer}" converter="univerConverter" >
                                <f:selectItems value="#{univerBean.allUnivers}"  var="univer"
                                               itemValue="#{univer}"
                                                itemLabel="#{univer.label}"/>
                            </p:selectOneMenu>
                        </h:panelGrid>
                    </div>
                    <div class="ui-g-12">
                        <h:panelGrid columns="1" cellpadding="3">
                            <p:commandButton value="Create student" action="#{studentBean.addStudent}"  ajax="false"
                                             style="display: block;text-align: center"/>

Converter:

@FacesConverter(value = "univerConverter")
public class UniverConverter implements Converter {
    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String univerId) {
        return UniverBin.getUniver(Long.valueOf(univerId));
    }
    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object univer) {
        return ((Univers)univer).getUniverId()+"";
    }
}

Фрагмент CDI Beans Students:

public void addStudent(){
    studentManagerBin.addStudent(surname, name, age, univer);
}

UniversBean:

public static  Univers getUniver(long id){
        for(Univers uni:univers){
            if(id==uni.getUniverId()){
                return uni;
            }
        }
        return null;
    }

Фрагмент EJB

public Students addStudent(String surname, String name, int age, Univers univer){
        Students student = new Students();
        student.setName(name);
        student.setSurname(surname);
        student.setAge(age);
        student.setUniver(univer);
        entityManager.persist(student);
        return student;
    }

Entity Students

 private long id;
    private String Surname;
    private String Name;
    private int age;
    @ManyToOne
    private Univers univer;

Entity Univers

    private long univerId;
    private String label;
    private double avg_age;
    @OneToMany(mappedBy="univer")
    private List<Students> listOfStudents;
READ ALSO
Не могу понять почему возникает IndexOutOfBoundsException

Не могу понять почему возникает IndexOutOfBoundsException

При работе этого кода возникает IndexOutOfBoundsException, хотя индекс никак не может выходить за пределы arrayList:

209
Когда следует использовать интерфейсы

Когда следует использовать интерфейсы

Столкнулся с тем, что часто в системах объявляют интерфейсы для каждого класса из слоёв service or repositoryСоответственно каждый интерфейс имеет...

208
Column &#39;personal.id&#39; is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

Column 'personal.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

Не могу решить проблему, все работает корректно на базе Н2, на базе mssql вылетает ошибка (должна обязательно быть mssql)

198